在标准C++中,用容器向量(vector)实现。容器向量也是一个类模板。标准库vector类型使用需要的头文件:#include<vector> 。vector 是一个类模板。不是一种数据类型,vector是一种数据类型。
vector的存储空间是连续的,list不是连续存储的。
vector<> 声明变量事不需要指定大小,数据可以随时插入,所以在编程时,如果事先不知道数组大小,常用vector代替数组,另外vector还内置了一些函数,让很多操作变得简便。
1 基本操作
(1)头文件#include<vector>.
(2)创建vector对象,vector<int>vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout<<vec[i]<<endl;
(5)使用迭代器访问元素.
vector<int>::iterator it; for(it=vec.begin();it!=vec.end();it++) cout<<*it<<endl; 我更常用的是,把v当成数组一样来遍历访问元素: for(int i=0;i<vec.size();i++) cout<<vec[i]<<endl;(6)插入元素: v. insert(pointer, content);在pointer指向的地方插入content内容
如vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a即将a插入vec[i];
v.insert(pointer,number, content) 向v中pointer指向的位置插入number个content的内容。
(7)删除元素:
v.erase(pointer1,pointer2) 删除pointer1到pointer2中间(包括pointer1所指,不包括pointer2指向的元素)的元素。(vector中删除一个元素后,此位置以后的元素都需要往前移动一个位置,虽然当前迭代器位置没有自动加1,但是由于后续元素的顺次前移,也就相当于迭代器的自动指向下一个位置一样。)
vec.erase(vec.begin()+2);删除第3个元素,即删除vec[2]
vec.erase(vec.begin()+i,vec.begin()+j);删除区间[i,j-1];区间从0开始
(8)向量大小:vec.size();
v.resize(n,a);若n比v当前的size大,则扩充v,并把其余元素设置成a;若小,则就将v的容量要缩减到n。并移除那些超出n的元素同时销毁他们。
int len=s.length(); vector<int>ispal; ispal.resize(len); for(int i=0;i<vec.size();i++) { ispal[i].resize(len,0); }
//初始化一个类似二元数组的ispal。
(9)清空:vec.clear(); (10) v.empty() 判断vector是否为空 (11) v.pop_back() 删除容器的末元素,并不返回该元素。
8. v1==v2 判断v1与v2是否相等。 9. !=、<、<=、>、>= 保持这些操作符惯有含义。
常用算法
(1) 使用reverse将元素翻转:需要头文件#include
reverse(vec.begin(),vec.end());将元素翻转(在vector中,如果一个函数中需要两个迭代器,后一个都不包含.) 翻转会改变vec的内容
(2)使用sort排序:需要头文件#include<algorithm>,
sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).
可以通过重写排序比较函数按照降序比较,如下:
定义排序比较函数:
bool Comp(const int &a,const int &b) { return a>b; } 调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。
(3)查找 vector<int>::iterator result = find( L.begin( ), L.end( ), 3 ); //查找3 if ( result == L.end( ) ) //没找到 cout << "No" << endl; else //找到 cout << "Yes" << endl; 转自我的搜狐博客 http://jluhlh.blog.sohu.com/301736330.html