vector容器用法详解(C++)

时间:2022-06-20 04:18:11

在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):向量中迭代器指向元素前增加一个元素xiterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素xiterator 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),这样就降序排序。