一、vector概念
vector是一种可存放任意类型(类型声明时指定)、自行扩展(加倍方式)、连续存储的容器,类似于可存放任意类型动态数组。
二、使用方法
1、头文件
#include <vector>
有时需要用到算法库
#include <algorithm>
2、初始化
vector的元素类型不仅仅可以是int,double,string,还可以是结构体,但是要注意,结构体要定义为全局的,否则会出错。
-
vector<int> vec; //创建int类型的空容器vec
-
vector<int> vec(10); //创建int类型的vec,10个元素
-
vector<int> vec(10,1); //创建int类型的vec,10个元素,每个元素初值为1
-
vector<int> vec(vec2); //用同类vec2创建vec,整体复制性赋值,类似于复制构造
-
vector<int> vec(vec2.begin(),vec2.begin+8);//用同类vec2的第0个元素到第7个元素,就是最后一个不包括共8个元素,给vec初始化
-
int a[10];
vector<int> vec(a,a+8); //和上一个类似,不过vec2换成了同类数组 -
vector<vector<int> > vec;//创建int类型的二维vec
-
vector<vector<int> > vec2(8,vector<int>(8));//创建int类型的二维vec,8行8列
3、读取元素
vector<int> a(8,8);
-
cout<<*a.begin();
//a.begin()相当于a首元素地址指针,指针操作加*取值 -
cout<<a[0];
//类似于数组 -
vector<int>::iterator it;//迭代器访问元素,定义迭代器it
it=a.begin();//指向a第一个元素
it++;//移向下一个元素
cout<<*it;//输出,类似于指针
vector<int>::iterator it;//迭代器访问元素,定义迭代器it
for(it=a.begin();it!=a.end();it++)
cout<<*it<<endl;
4、插入、赋值元素
vector<int> a;
vector<int> b(8,8);
int c[10]={0,1,2,3,4,5,6,7,8,9};
- a.push_back(1);//a尾部插入元素1,元素类型要对应
- a.insert(a.begin()+1,2);//在第1个元素位置插入2(从0开始,下同)
- a.insert(a.begin()+1,2,3);//在第1个位置插入2个3
- a.insert(a.begin()+1,c+2,c+4); //把数组c第2个元素到第4个元素(左闭右开)插入到a第一个位置
- a.insert(a.begin()+1,b.begin()+2,b.begin()+4);//和上一个类似,不过b为a的相同类型
- a.assign(8,10);//将第8个位置元素设置为10
- copy(b.begin(), b.end(), a.begin());//将b开始到结束(左闭右开)拷贝到a
- copy(c,c+10,a.begin());//和上一个类似,不过c为同类数组
- a[1]=8;//危险操作,有时可以,该位置必须存在且a大小不为空
5、删除元素
vector<int> a;
- a.clear(); //清空a中的元素
- a.pop_back(); //删除a的最后一个元素
- a.erase(a.begin()+1);将a第1个元素删除
- a.erase(a.begin()+1,a.begin()+3);//把a从第一个元素到第3个元素(左闭右开)删除
6、常用算法
vector<int> a;
vector<int> b;
注:需包含头文件#include <algorithm>
-
排序
sort(a.begin(),a.end());
将a从开始到结束按由小到大排序,参数可变 -
元素颠倒
reverse(a.begin(),a.end());
将a从开始到结束元素颠倒,通常使用sort再用reverse达到降序的目的 -
复制
copy(a.begin(),a.end(),b.begin());
将a中从开始到结束,复制到b开始的位置,参数可变 -
查找
find(a.begin(),a.end(),10);
在a中从头到尾找10的位置,并返回改位置
7、其它常用工具
vector<int> a;
vector<int> b;
- 判断是否为空
a.empty();
返回值:bool,判断是否为空 - 获得现有元素个数
a.size();
返回值:int,现有元素个数 - 获得容器容量
a.capacity();
返回值:int,容器当前空间
注:vector为倍增容器,空间不够增加一倍,所以容器空间不一定等于元素个数