vector:
- 概念:
数组: 简单、高效但是,静态数组、new动态创建的数组,都难以检测下标越界的错误,从而在实际运行中造成困扰因而,C++标准库提供了被封装的数组——vector,而且这种被封装的数组可以具有各种类型
vector 不是一个类,而是一个类模板
2. 定义动态数组的形式:
vector<元素类型>数组对象名(数组长度);
<>中的类型:数组元素的类型
数组长度:一个表达式,表达式可以包含变量
细节:
1)
用vector定义的数组对象的所有元素都会被初始化。
如果数组的元素类型是基本类型,所有元素都会被0初始化
如果数组元素为类类型,则会调用类的默认构造函数初始化(保证类具有默认构造函数)
2) 初值也可自己指定,但所有元素只能指定相同的初值
eg: vector<元素类型>数组对象名(数组长度,元素初值);
访问形式:
数组对象名[下标表达式];
注意:
vector数组对象的名字表示的就是一个数组对象,而非数组的首地址。因为数组对象不是数组,而是封装了数组的对象
该数组对象具有一个重要的成员:size(): 它会返回数组的大小
3. 一维vector
eg:
vector<int > arr;
可以使用 arr.push_back(value) 向vector中添加元素
arr.pop_back(value)弹出元素
二维vector
eg: vector<vector <int> > cluster_list (变量名) 注意红色符号前面的空格
1). 用二维首先得指定一个长度(如果这个长度是知道的)
eg: cluster_list.resize(指定长度)
2). 如果长度事先不知道
eg: vector<int> a;
cluster_list.push_back(a);
二维vector直接初始化为零
二维数组的行数M,列数N,那么这样就可以了vector<vector<int>> a<M,vector<typedef>(N,0)>.其中typedef为元素的类型
4. 使用场景:对用于不需要对数据进行随机增、删的场合
因为vector底层实现时存储在连续的地址上,随机的删除,增加会伴随着大量数据的移动,以及vector的重建。
#include<vector>
5. 清空vector的三种方法:
1). clear:清空元素,但不回收空间;
2). erase: 用来删除一个元素;
3). swap: 清除容器并回收内存;
6. 使用迭代器遍历vector:(STL为容器的遍历提供迭代器)
vector<int>::iterator itor;
itor=cluster_list[i].begin(); 指向容器的第一个位置
itor=cluster_list[i].end(); 指向容器最后一个元素的下一个位置
关联容器是能够通过键值来查找和读取元素的容器