在C++中,vector是一个十分有用的容器,总结如下:
1.包含头文件
#include <vector>
using namespace std;
2.定义vector容器
vector容器构造函数
vector():创建一个空vectorvector初始化实例
vector(int nSize):创建一个vector,元素个数为nSize
vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
vector(const vector&):复制构造函数
vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中
//int型vector
vector<int> vecInt;
//float型vector
vector<float> vecFloat;
//嵌套vector
vector<vector<int>> vec;
//结构体或类 类型的vector
class A
{
//空类
};
vector<A> vecA
struct B
{空结构体}
vector<B> vecB
//使用构造函数的初始化
//int型vector,包含3个元素
vector<int> vecIntA(3);
//int型vector,包含3个元素且每个元素都是9
vector<int> vecIntB(3,9);
//复制vecIntB到vecIntC
vector<int> vecIntC(vecIntB);
//复制数组中begin-end这段区间上的值到vector中
int iArray[]={2,4,6};
vector<int> vecIntD(iArray,iArray+3);
3.基本操作
3.1增加函数
void push_back(const T& x):向量尾部增加一个元素X //使用vector函数添加数
//使用迭代器添加数iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素xiterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素xiterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据增加实例
//push_back在尾部插入数字13.2删除函数
vector<int> vecIntA;
vecIntA.push_back(1);
//使用迭代器在第一个位置插入数值888
vector<int> vecIntB;
vector<int>::iterator it;
vecIntB.insert(it=vecIntB.begin(),888);
//使用迭代器在第一个位置前插入数值3个888
vector<int> vecIntC;
vector<int>::iterator it;
vecIntC.insert(it=vecIntC.begin(),3,888);
iterator erase(iterator it):删除向量中迭代器指向元素删除实例
iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
void pop_back():删除向量中最后一个元素
void clear():清空向量中所有元素
//删除最后一个元素3.3修改vector容器中数
vecIntA.pop_back();
//删除第四个位置的元素
vector<int> vecIntA;
vecIntA.erase(vecIntA.begin()+4);
//删除第2-5个元素
vecIntA.erase(vecIntA.begin()+1,vecIntA.begin()+5);
(1)通过数组修改
//修改第二个元素为8
vector<int> vecIntA;
vecIntA[1]=8;
(2)通过引用修改
//修改第二个元素为18
vector<int> vecIntA;int &m = vecIntA.at(1); m=18;
(3)通过迭代器修改
//修改第二个元素为28
vector<int> vecIntA; vector<int>::iterator itr = vecIntA.begin()+1; *itr = 28;3.4输出vector容器内容
(1)
vector<int> vecIntA;
for(int i=0;i<vecIntA.size();i++)
{
cout<<vecIntA[i]<<endl;
}
(2)
vector<int> vecIntA;
for(int i=0;i<vecIntA.size();i++)
{
cout<<vecIntA.at(i)<<endl;
}
(3)
vector<int> vecIntA;3.5 判断容器是否为空:vec.empty()
for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
{
cout<<*it<<endl;
}
3.6传回第一个数据:vec.front();
3.7清空:vec.clear();
3.8向量数量:vec.size();
4.算法
4.1使用reverse将元素翻转:
需要头文件#include<algorithm>,
reverse(vec.begin(),vec.end());
将元素翻转(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含)。
4.2使用sort排序:
需要头文件#include<algorithm>,
sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大)。
可以通过重写排序比较函数按照降序比较,如下:
定义排序比较函数:
bool Comp(const int &a,const int &b)
{
return a>b;
}
调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。