C++ 提供了各种不同类型的容器,vector是其中一种,是可以存放任意类型的动态数组.以下对vector中常用的操作进行总结.
创建对象&初始化
- 不带参数创建对象
vector<int> v;
- 带参数创建
vector<int> v(5);//使用默认值0初始化
- 创建并指定初始值
vector<int> v(5,1);//创建5个值为1的元素
- 通过同类型数组或向量初始化
int a[5] = {0,1,2,3,4};
vector<int> v(5,1);
vector<int> v1(a+1, a+5);//使用数组地址初始化
vector<int> v2(v);//使用同类型vector初始化
向量大小
v.size()
访问元素
使用下标访问:
v2[i]
使用迭代器访问:
vector<int>::iterator iter;
for(iter=v1.begin(); iter!=v1.end(); iter++)
cout<<*iter<<endl;
示例:
#include <iostream>
#include <vector>
using namespace std;
int main(){
int a[5] = {1,2,3,4,5};
vector<int> v1(a+1, a+5);
vector<int> v2(3,10);
vector<int>::iterator iter;
for(iter=v1.begin(); iter!=v1.end(); iter++)
cout<<*iter<<endl;
for(int i=0; i<v2.size(); i++)
cout<<v2[i]<<endl;
return 0;
}
尾部插入
v.push_back(5);
插入元素
v.insert(v.begin(), 5, 10);//在v开始位置插入5个10
int a[5] = {1,2,3,4,5};
vector<int> v;
v.insert(v.begin, a+1, a+5);//将a中第2到第5个元素插入v开始位置
删除
v.erase(v.begin()+i, v.end()-j);//删除v中在[i,j-1]区间的元素
v.erase(v.begin()+i);//删除第i+1个元素
清空
v.clear();
排序
使用sort()函数进行排序,头文件为 #include< algorithm >:
sort(v.begin(),v.end());//默认按升序排列
翻转
使用reverse()函数进行翻转,头文件为 #include< algorithm >:
reverse(vec.begin(),vec.end());
去除重复元素
使用unique()函数去除vector中的重复元素;
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
char a[5] = {'T','T','E','E','T'};
vector<char> v1(a, a+5);
sort(v1.begin(), v1.end());
v1.erase(unique(v1.begin(), v1.end()), v1.end());
for(int i=0; i<v1.size(); i++)
cout<<v1[i]<<endl;
return 0;
}
输出:
E
T
注意事项
- 由于vector会预先分配一定的内存空间,因此时间占用空间比需要的多.当vector空间不足时,会申请约为当前占用内存两倍的新空间.若vector长度较长则容易导致内存被全部占用,程序崩溃;
- vector申请的内存空间不会缩减,使用clear()函数只是清空了其中的元素.此时可以使用swap()函数交换两个vector对象所指的内存空间:
v.swap(vector<int>());
- 预先知道所需内存大小时可以使用vector的reserve()函数事先申请足够的内存空间.
- vector作为函数参数时的写法为:
int fun(vector&v1, vector& v2)
- vector的元素为结构体时,结构体要定义为全局的.