1. 简介
C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库( STL, Standard Template Library)的一部分, 是能够操作多种数据结构和算法的模板类和函数库.
2. 基本操作
#include<vector> // 头文件
vector<int> vec; // 创建vector类
cout<<vec[0]<<endl; // 使用下标访问元素
/* 使用迭代器访问元素 */
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
vec.insert(vec.begin()+i,a); // 在第i+1个元素前面插入a
vec.erase(vec.begin()+2); // 删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j); // 删除区间[i,j-1];区间从0开始
vec.push_back(5); // 在最后插入数值5
vec.pop_back(5); // 删除最后一个元素
vec.size(); // 向量大小
vec.empty(); // 判断是否为空
vec.clear(); // 清空
3. 注意
3.1 vector 的元素不止可以是 int, float, double 也可以是结构体, Note 结构体需要定义为全局变量;
3.2 Vector作为函数的参数或者返回值时,需要注意它的写法:
double Distance(vector<int>&a, vector<int>&b) // 其中引用标识符 & 绝对不能少
4. 使用STL中的算法
4.1 元素翻转
#include<algorithm>
reverse(vec.begin(),vec.end());//将元素翻转,即逆序排列!
4.2 排序
#include<algorithm>
sort(vec.begin(),vec.end());//默认是按升序排列,即从小到大
4.3 复制
#include<algorithm>
copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
4.4 查找
#include<algorithm>
find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
5. vector 的内存释放
类似数组,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储. vector 内存只增不减,在析构的时候被回收, 虽然 clear()
函数可以清空所有元素, 但是依旧占用空间.
vector 中的内建有内存管理,当 vector 离开它的生存期的时候,它的析构函数会把 vector 中的元素销毁,并释放它们所占用的空间,所以用 vector 一般不用显式释放 ——不过,如果你 vector 中存放的是指针,那么当 vector 销毁时,那些指针指向的对象不会被销毁,那些内存不会被释放.
利用swap()
函数清理内存:
vector<tempObject>().swap(tempVector); // 创建一个没有被分配内存的 vector 用想要被清除内存的 vector 和它交换