在C++中,vector是一个十分有用的容器,总结如下:

1.包含头文件

#include <vector>
using namespace std;

2.定义vector容器

vector容器构造函数

vector():创建一个空vector
vector(int nSize):创建一个vector,元素个数为nSize
vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
vector(const vector&):复制构造函数
vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中
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):向量中迭代器指向元素前增加一个元素x
iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
增加实例
//push_back在尾部插入数字1
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);

3.2删除函数

iterator erase(iterator it):删除向量中迭代器指向元素
iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
void pop_back():删除向量中最后一个元素
void clear():清空向量中所有元素
删除实例

//删除最后一个元素  
vecIntA.pop_back();  

//删除第四个位置的元素
vector<int> vecIntA;
vecIntA.erase(vecIntA.begin()+4);

//删除第2-5个元素  
vecIntA.erase(vecIntA.begin()+1,vecIntA.begin()+5);

3.3修改vector容器中数

(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;
for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
    {  
        cout<<*it<<endl;  
    }  
3.5 判断容器是否为空:vec.empty()

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),这样就降序排序。





Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐