Vector浅谈


定义

存储相同类型对象的集合,称为容器,长度可变的序列容器
vector是一个类模板不是类型,指定类型参数后可生成对应类型


初始化

vector常用构造函数

vector(); 创建一个没有任何元素的空向量
vector(vector&& _Right); 创建一个向量,并使用向量_Right初始化该向量
vector(size_type Count); 创建一个大小为Count的向量vect
vector(size_type Count,const Type& Val); 创建一个大小为Count的向量,该向量中所有的元素都初始化为Val
template vector(InputIterator _first,InputIterator _last); 创建一个向量,并以迭代器_first和_last之间的元素初始化该向量
  • 拷贝初始化 赋值运算初始化
  • 直接初始化 构造函数指定参数 ()或{}

默认初始化

  • 不指定长度,不可通过向量索引添加元素

列表初始化

  • {…}使用列表中元素为向量元素初始化
  • {}中元素类型与向量元素元素类型不匹配时,作()处理

值初始化

  • 仅指定长度,剩余元素均默认初始化

创造指定数量的元素

  • (num,value) 创建有num个值为value元素的向量

vector的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<vector> //需要包含头文件
a.assign(c.begin(), c.begin() + 3); //将c的0~2个元素构成的向量赋给a
a.assign(4, 2); //a只含4个元素,且每个元素为2
a.back(); //返回a的最后一个元素;
a.front(); //返回a的第一个元素
a[i];//返回a的第i个元素,当且仅当a[i]存在,才可使用下标索引
a.clear(); //清空a中的元素
a.empty(); //判断a是否为空,空则返回ture,不空则返回false
a.pop_back(); //删除a向量的最后一个元素
a.push_back(5); //在a的最后一个向量后插入一个元素,其值为5
a.erase(a.begin() + 1, a.begin() + 3); //删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)
a.insert(a.begin() + 1, 5); //在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
a.insert(a.begin() + 1, 3, 5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
a.insert(a.begin() + 1, b + 3, b + 6); //b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8 ,插入元素后为1,4,5,9,2,3,4,5,9,8
a.size(); //返回a中元素的个数;
a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,其值随机
a.resize(10, 2); //将a的现有元素个数调至10个,多则删,少则补,其值为2
a.swap(c); //c为向量,将a中的元素和c中的元素进行整体性交换

二维向量

1
2
vector <int*> a;
vector <vector <int>> b; //二维向量由若干一维向量组成

遍历

范围for循环不允许改变其遍历序列的大小

for (循环遍历声明 : vector向量){}
该循环遍历若为引用声明 则修改引用变量值可修改vector向量元素内容