vector容器经常用法
容器简单介绍
定义及初始化
vector<int> vec(5,100);
vector<string> strVec(10,"hello");
末尾插入元素
vec.push_back(102);
strVec.push_back("what");
遍历 size() 函数是能够动态添加的
for(vector<int>::size_type ix=0;ix<vec.size(); ix++)
{
cout<<vec[ix]<<endl;
vec.push_back(ix+10);
cout<<"size is"<<vec.size()<<endl;
if(vec.size()==10)
{
break;
}
}
for(vector<string>::size_type jx=0;jx<strVec.size();jx++)
{
cout<<strVec[jx]<<endl;
}
通过下标操作添加改变vector内容,不是安全的操作
vector <int> vec2(10);
cout<<vec2[9]<<endl;
cout<<vec2[10]<<endl;
仅能对已存在元素进行下标操作。不存在会crash
vector<int> emptyVec;
//cout<<emptyVec[0]<<endl; error
将元素一个容器复制给另外一个容器,类型必须匹配。容器类型和元素类型必须同样
vector<int> vecCopy(vec);
for(vector<int>::size_type i=0;i<vecCopy.size();i++)
{
cout<<vecCopy[i]<<endl;
}
迭代器简单介绍
全部标准库容器都支持迭代器。但仅仅有少数的容器支持下标操作
定义
vector<int>::iterator iter;
begin和end操作
begin返回迭代器指向的第一个位置,end指向vector的末端元素的下一个
vector<string>::iterator iBegin=strVec.begin();vector<string>::iterator iEnd=strVec.end();
迭代器的自增和解引用操作
++iter指向第二个元素
*iter指向当前元素
cout<<*iBegin<<endl;
cout<<*(iEnd-1)<<endl;
for(;iBegin<iEnd;iBegin++)
{
cout<<*iBegin<<endl;
}
迭代器的算术操作
iter+n iter-n
iter1-iter2
string str("richard");
*(iBegin+3)=str;
cout<<*(iBegin+3)<<endl;
cout<<iEnd-iBegin<<endl;
vector<string>::iterator
mid=iBegin+strVec.size()/2;
cout<<*mid<<endl ;
const_iterator 仅仅读
高级使用方法
容器元素类型必须满足例如以下两个约束
元素类型必须支持赋值运算
元素类型的对象必须能够复制
除了引用类型和IO标准库类型外。全部内置内置类型和复合类型都支持容器
顺序容器的操作
begin() 返回一个迭代器,指向容器的第一个元素
end()指向最后一个元素 。rbegin()逆序迭代器,指向容器的最后一个元素,rend()指向容器第一个元素前面位置
加入元素的操作
list,vector和dequeue支持例如以下操作
c.push_back(t); 在容器c末尾加入元素
list和dequeue 支持push_fron(t); 在容器c的最前面加入元素
list<int> ilist;
for(size_t ix=0;ix<4;ix++){
ilist.push_front(ix);
}
for(list<int>::iterator iter=ilist.begin();iter!=ilist.end();iter++){
cout<<*iter<<endl;
}
insert操作实现一组更通用的方法,实如今容器内随意制定的位置插入新的元素
vector<string> strVec;
//第一种情况 。參数是位置和内容
strVec.insert(strVec.begin(),"yang");
//另外一种情况,參数是数量和内容
strVec.insert(strVec.begin(),1,"richard");
for(int i=0;i<strVec.size();i++){
// cout<<strVec[i]<<endl;
}
//第三种情况,參数是指针
string sarray[4]={"hello","world","hello","fat"};
strVec.insert(strVec.begin(),sarray+1,sarray+3);
for(i=0;i<strVec.size();i++){
cout<<strVec[i]<<endl;
}
避免存储end操作返回的迭代器
当向vector加入元素时,end失效,内存地址发生了改变,此时千万不用使用存储end操作的迭代器
关系运算符
比較的容器必须具有同样的容器类型,并且元素类型也必须同样
容器大小的操作
size()返回容器的长度
empty()标记容器大小是否为零
resize(n)调整容器大小,使其容纳n个元素。
font和back操作
font()返回容器的第一个元素
back()返回容器的最后一个元素
vector<int> vec(5,10);
cout<<vec.front()<<endl;
vec.push_back(11);
cout<<vec.back()<<endl;
删除元素
1、pop_back()删除容器的最后一个元素。返回void
2、erase(p)删除迭代器p所指向的元素
3、erase(b,e)删除迭代器b和e所标记范围内全部的元素,返回一个迭代器,指向被删除元素段后面的元素。假设e本身就是指向末端的下一个位置的迭代器。则返回的迭代器也指向同样的位置
4、clear() 删除容器内的全部元素
vector<int> vec(5,10);
cout<<vec.front()<<endl;
vec.push_back(11);
cout<<vec.back()<<endl;
vec.pop_back();
cout<<vec.size()<<endl;
vec.erase(vec.begin());
cout<<vec.size()<<endl;
vec.erase(vec.begin(),vec.end());
cout<<vec.size()<<endl;
vec.clear();
cout<<vec.size()<<endl;
capacity和reserve
capacity操作获取容器须要分配很多其它空间之前能够存储的元素总数,reserve操作则告诉vector应该预留多少个元素的存储空间
vector<int> vec(5,10);
for(int i=0; i<10; i++) {
vec.push_back(i);
}
cout<<vec.capacity()<<endl;
vector<int> vec2;
vec2.reserve(30);
cout<<vec2.capacity()<<endl;
vector容器经常用法的更多相关文章
- vector容器的用法
转自一篇博客^-^: 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<int> vec; (3)尾部插入数字:vec.p ...
- c++ vector容器基本用法
基本用法 #include<iostream> #include<string> #include<vector> using namespace std; cla ...
- vector容器的用法以及动态数组
vector容器不必去管大小 string申明的数组已经是动态的了 若是int类型的话,需要 cin>>N: int a[N]会出错 ,必须是int *p = new int[N] 然后再 ...
- (转载)C++STL中vector容器的用法
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vec ...
- 【C++】vector容器的用法
检测vector容器是否为空: 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 us ...
- Vector 容器简单介绍
# Vector STL简要介绍 关于STL中的vector容器,以下做一些相关介绍. #### vector 简要概述 vector 称作向量类,属于容器类,实现了动态的数组,用于元素数量变化的对象 ...
- STL:vector容器用法详解
vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着ve ...
- vector容器用法详解
vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着ve ...
- STL之二:vector容器用法详解
转载于:http://blog.csdn.net/longshengguoji/article/details/8507394 vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组. ...
随机推荐
- 【转】block一点也不神秘————如何利用block进行回调
我们在开发中常常会用到函数回调,你可以用通知来替代回调,但是大多数时候回调是比通知方便的,所以何乐而不为呢?如果你不知道回调使用的场景,我们来假设一下: 1.我现在玩手机 2.突然手机没有电了 3.我 ...
- model 和 view 实现思考
采用model.view = view 和 view.model=model 进行双向绑定,还有一种方案是采用id号进行绑定,viewmodel的views 和 models 属性存放所有的id 映 ...
- css命名为何不推荐使用下划线_
一直习惯了在命名CSS样式名时使用下划线“_”做为单词的分隔符,这也是在写JS时惯用的写法. 用过CSS hack的朋友应该知道,用下划线命名也是一种hack,如使用“_style”这样的命名,可以让 ...
- 解决WebService本地访问正常,远程无法访问的问题
发布webservice后部署到自己的服务器上,然后本机,外网远程访问都没事,在用户服务器上部署后只能本机访问,远端访问不了,通过网络搜索到下面方法,但改后仍然不行.原来在自己服务器部署时是在默认网站 ...
- git branch分支管理用法总结
查看分支(远程和本地) 1 查看本地分支: $ git branch 2 查看远程分支: $ git branch -r 3.查看本地和远程分支 $ git branch -a 创建分支 1.创建本地 ...
- ECharts 是一款开源
ECharts
- python numpy 使用笔记 矩阵操作
(原创文章转载请标注来源) 在学习机器学习的过程中经常会用到矩阵,那么使用numpy扩展包将是不二的选择 建议在平Python中用多维数组(array)代替矩阵(matrix) 入门请考 http:/ ...
- iOS开发——OC篇&常用关键字的使用与区别
copy,assign,strong,retain,weak,readonly,readwrite,nonatomic,atomic,unsafe_unretained的使用与区别 最近在学习iOS的 ...
- C#.Net参数
C#.Net参数 阅读目录 引言 形参和实参 命名实参 可选参数 params,数目可变参数 方法解析与重载决策 参数传递 [重难点] ref引用参数/out输出参数 参数修饰符 泛型类 ...
- 如何将github上的微信客户端类库能够通过composer工具下载
我将自己开发的微信客户端类库放到了github上面去了. 然后我在我的项目里面添加了一个composer.json文件 内容如下 { "require": { "weix ...