一维数组与多维数组,是C++中最常用的系列存储工具,数组的常规使用的基础上,STL的中自带多种升级版的容器与基础函数,vector则是其中一款。
1、vector的基础概念1.1 vector翻译为向量,但称为 可变长数组 或者 动态数组 更容易理解;
1.2 vector内部采用连续存储空间来存储元素,所以存储与操作的逻辑与数组类似,支持指定元素的快速访问和操作。
1.3 vector的元素不仅可以是int,double,string,还可以是 结构体(注意:结构体要定义为全局的,否则会出错)。
2.1 如果题目中某些数据范围不定,只用普通数组可能会超内存,针对这种情况,使用vector是个好的解决方案;
2.2 vector常用于邻接表的方式储存图,写法也非常简洁,适合图论初学者。
| 序号 | 功能 | 代码样例 | 效果介绍 | 备注 |
|---|---|---|---|---|
| 1 | 定义1 | vector a; | 定义一个空的容器a | |
| 2 | 定义2 | vector a(10); | 定义一个容器a,初始大小为10 | |
| 3 | 定义3 | vector a[10]; | 定义十个容器a,即第一维有10格,第二维未设定大小 | 常用于图的存储 |
| 4 | 初始化1 | vector a(10,1); | 定义一个a,初始大小为10,每格的初始值为1 |
刚开始接触vector的选手,会有一个使用数组留下的惯性误区;
请观察以下错误的遍历与操作代码:
vector3、常用操作函数a; for(int i=0;i<10;i++) a[i]=i; //错误分析:刚定义的向量a,下标关系未生成,所以访问空间不合法。
| 序号 | 功能 | 代码样例 | 效果介绍 |
|---|---|---|---|
| 1 | 尾部插入 | a.push_back(x) | 在容器尾部插入一个值为x的元素 |
| 2 | 中间插入 | a.insert(a.begin()+i,x) | 在第i个元素前插入x |
| 3 | 求长度 | a.size() | 返回元素个数 |
| 4 | 访问头尾 | a.begin() a.end() | 访问容器的头部元素 尾部元素 |
| 5 | 遍历1 | for(auto i:a) | 遍历a中所有元素 |
| 6 | 遍历2 | for(i=v.begin();i| 遍历a中所有下标 | |
| 7 | 删除尾巴 | a.pop_back() | 删除尾部的元素 |
| 8 | 删除某个元素 | a.erase(v.begin()+i) | 删除下标为i位置的元素 |
| 9 | 删除某段 | a.erase(v.begin()+l,v.begin()+r) | 删除下标[l,r)的元素 |
| 10 | 清空 | a.clear() | 清空容器所有元素 |
| 11 | 排序 | sort(a.begin(),a.end()); | 将a中元素按升序排列 |
| 12 | 颠倒 | reverse(a.begin(),a.end()); | 将a中元素顺序颠倒 |
| 13 | 交换 | swap(a,b); | 交换两个序列的所有元素 |



