vector向量容器
vector向量容器不但能够像数组一样对元素进行随机访问,还能再尾部插入元素是一种简单、高效的容器。
包含头文件
#include<vector>
使用
STL泛型都定义再std命名空间中
迭代器相关
- 创建iterator迭代器
vector<int>::iterator it;
- 获得迭代器当前位置上的值
*it;
两个重要方法
- begin()
返回首元素位置的迭代器 - end()
返回最后一个元素的下一个元素位置的迭代器
#include<iostream> #include<vector> using namespace std; int main(){ vector<int> v(10); for(int i=0;i<10;i++){ v[i]=i; } vector<int>::iterator it; //获取第0个元素的值 it=v.begin(); cout<<*it<<endl; it=v.end()-1; //获取最后一个元素的值 cout<<*it<<endl; return 0; } //输出结果 //0 //9
创建vector对象
- 不指定容器元素个数
例如一个整型容器
vector<int> v;
- 创建时指定容器的大小
vector<double> v(10);
- 每个元素的值被初始化为0.0
- 创建具有n个元素的容器对象,每个元素都是指定的初值
vector<double> v(10,6.6);
尾部元素扩张
使用push_back()在vector容器尾部追加新元素,vector容器会自动分配新的内存空间。
可对空的vector对象扩张也可以对已有元素的vector扩张
#include<iostream> #include<vector> using namespace std; int main(){ vector<int> v; v.push_back(1); cout<<v[0]<<endl; return 0; } //输出结果 //1
使用下标方式访问vector元素
类似数组
用迭代器访问vector元素
- 迭代器的类型一定要与它要遍历的vector对象的元素类型一致
- 使用迭代器配合循环语句来对vector对象进行遍历访问
vector<int>::iterator it; for(it=v.begin();it!=v.end();it++){ cout<<*it<<"\t"; } cout<<endl;
元素的插入
- insert() 方法可以在vector对象的任意位置前插入一个新的元素
- 插入位置后的所有元素依次向后挪动一个位置
- insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。
//在第2个元素前插入一个新元素1 v.insert(v.begin()+2,1);
元素的删除
- erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素
- 删除的区间,是左闭右开区间,[ )
- 删除的位置,是元素的迭代器位置,而不是元素的下标。
- clear()方法则以此性删除vector中的所有元素
//删除第2个元素 v.erase(v.begin()+2); //删除迭代器从第1到第5区间的所有元素 //删除的包含第1位,不包含第5位 v.erase(v.begin()+1,b.begin()+5); //清空向量 v.clear()
向量的大小
- 使用size()方法可以返回向量的大小,即元素的个数
- 使用empty()方法返回向量是否为空
v.size(); v.empty();
使用reverse()反向排列算法
- reverse()算法可将向量中某段迭代器区间元素进行反向排列
- 左闭右开区间,[ )
- reverse反向排列算法,需要包含头文件 algorithm
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(){ vector<int> v(10); for(int i=0;i<10;i++){ v[i]=i; } reverse(v.begin(),v.end()); vector<int>::iterator it; for(it=v.begin();it!=v.end();it++){ cout<<*it<<"\t"; } cout<<endl; return 0; }
使用sort算法对向量元素排序
- 使用sort算法,需要声明头文件
#include<algorithm>
- sort算法要求使用随机访问迭代器进行排序,在默认情况下,对向量进行升序排列
- 左闭右开区间,[ )
//升序排列sort(v.begin(),v.end());
- 自己设计排序比较函数,然后把这个函数指定给sort算法。
sort就根据这个比较函数指定的排序规则进行排序
//自己设计排序比较函数,对元素的值进行降序排列 bool Comp(const int& a,const int& b){ return a>b; } sort(v.begin(),b.end(),Comp);
#include<iostream> #include<vector> #include<algorithm> using namespace std; bool Comp(const int& a,const int& b); int main(){ vector<int> v(10); for(int i=0;i<10;i++){ v[i]=i; } sort(v.begin(),v.end(),Comp); vector<int>::iterator it; for(it=v.begin();it!=v.end();it++){ cout<<*it<<"\t"; } cout<<endl; return 0; } bool Comp(const int& a,const int& b){ return a>b; }
- sort()函数的第三个参数,还可以使用这样的语句告诉程序所采用的排序原则
less<数据类型>() //从小到达排序 greater<数据类型>()//从大到小排序
sort(v.begin(),v.end(),less<int>());
#include<iostream> #include<vector> #include<algorithm> using namespace std; bool Comp(const int& a,const int& b); int main(){ vector<int> v(10); for(int i=0;i<10;i++){ v[i]=i; } sort(v.begin(),v.end(),greater<int>()); vector<int>::iterator it; for(it=v.begin();it!=v.end();it++){ cout<<*it<<"\t"; } cout<<endl; return 0; }
两个STL
- SGI STL是由Silicon Graphics Computer Systems 公司参照HP STL实现的,只要设计者仍是Alexandar Stepanov, 被Linux的C编译器GCC所采用。
SGI STL是开源软件,可以在http://www.sgi.com/网站上下载。 - STLport是俄国人Boris Fomitchev建立的一个free项目,是开放源代码的,主要目的是使SGI STL的基本代码都适用于VC和C Builder等多种编译器,源码可以在http://www.stlport.com/下载。