C/C++ vector详解

要想了解STL,就必须会看:

cplusplus.comicon-default.png?t=N7T8https://legacy.cplusplus.com/

官方内容全都是英文的,可以参考:

C/C++初始识icon-default.png?t=N7T8https://blog.csdn.net/2301_77087344/article/details/138596294?spm=1001.2014.3001.5501

vector:向量,顺序表,是一个类模板,顺序容器

         vector类常用的函数如下:

1.构造函数


  • 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中

2.增加函数


  • void push_back(const T& x)://向尾部增加一个元素x
  • 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)://向量中迭代器指向元素前插入另一个相同类型向量的[firs.last)间的数据

3.删除函数


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

4.遍历函数


  • reference at(int pos)://返回pos位置元素的引用
  • reference front()://返回首元素的引用
  • reference back()://返回尾元素的引用
  • iterator begin()://返回向量头指针,指向第一个元素
  • iterator end()://返回为指针,指向向量最后一个元素的下一个位置
  • reverse_iterator rbein()://反向迭代器,指向最后一个元素
  • reverse_iterator rend()://指向第一个元素之前的位置

5.判断函数


  • bool empty() const://判断向量是否为空,为空,则向量中无元素

6.大小函数


  • int size() const://返回向量中元素的个数
  • int capacity() const: //返回当前向量中宏能容纳的最大元素值
  • int max_size() const://返回最大可允许的vector元素数量值

7.其他函数


  • void swap(vector&);//交换连个同类型的数据
  • void assign(int n,const T& x);//设置向量中第n个元素为x
  • void assign(const_iterator first,const_iterator last)://向量中[first,last)中元素设置成当前向量元素

示例:

1.初始化


  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6. class A  
  7. {  
  8.     //空类  
  9. };  
  10. int main()  
  11. {  
  12.       
  13.     //int型vector  
  14.     vector<int> vecInt;  
  15.   
  16.     //float型vector  
  17.     vector<float> vecFloat;  
  18.   
  19.     //自定义类型,保存类A的vector  
  20.     vector<A> vecA;  
  21.   
  22.     //自定义类型,保存指向类A的指针的vector  
  23.     vector<A*> vecPointA;  
  24.   
  25.     return 0;  
  26. }  
  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6. class A  
  7. {  
  8.     //空类  
  9. };  
  10. int main()  
  11. {  
  12.       
  13.     //int型vector,包含3个元素  
  14.     vector<int> vecIntA(3);  
  15.       
  16.     //int型vector,包含3个元素且每个元素都是9  
  17.     vector<int> vecIntB(3,9);  
  18.   
  19.     //复制vecIntB到vecIntC  
  20.     vector<int> vecIntC(vecIntB);  
  21.       
  22.     int iArray[]={2,4,6};  
  23.     //创建vecIntD  
  24.     vector<int> vecIntD(iArray,iArray+3);  
  25.   
  26.     //打印vectorA,此处也可以用下面注释内的代码来输出vector中的数据  
  27.     /*for(int i=0;i<vecIntA.size();i++) 
  28.     { 
  29.         cout<<vecIntA[i]<<"     "; 
  30.     }*/  
  31.   
  32.     cout<<"vecIntA:"<<endl;  
  33.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  34.     {  
  35.         cout<<*it<<"     ";  
  36.     }  
  37.     cout<<endl;  
  38.   
  39.     //打印vecIntB  
  40.     cout<<"VecIntB:"<<endl;  
  41.     for(vector<int>::iterator it = vecIntB.begin() ;it!=vecIntB.end();it++)  
  42.     {  
  43.         cout<<*it<<"     ";  
  44.     }  
  45.     cout<<endl;  
  46.   
  47.     //打印vecIntC  
  48.     cout<<"VecIntB:"<<endl;  
  49.     for(vector<int>::iterator it = vecIntC.begin() ;it!=vecIntC.end();it++)  
  50.     {  
  51.         cout<<*it<<"     ";  
  52.     }  
  53.     cout<<endl;  
  54.   
  55.     //打印vecIntD  
  56.     cout<<"vecIntD:"<<endl;  
  57.     for(vector<int>::iterator it = vecIntD.begin() ;it!=vecIntD.end();it++)  
  58.     {  
  59.         cout<<*it<<"     ";  
  60.     }  
  61.     cout<<endl;  
  62.     return 0;  
  63. }  

2.增加及获得元素:

  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6. class A  
  7. {  
  8. public:  
  9.     int n;  
  10. public:  
  11.     A(int n)  
  12.     {  
  13.         this->n = n;  
  14.     }  
  15. };  
  16.   
  17. int main()  
  18. {  
  19.       
  20.     //int型vector,包含3个元素  
  21.     vector<A> vecClassA;  
  22.   
  23.     A a1(1);  
  24.     A a2(2);  
  25.     A a3(3);  
  26.   
  27.     //插入1 2 3  
  28.     vecClassA.push_back(a1);  
  29.     vecClassA.push_back(a2);  
  30.     vecClassA.push_back(a3);  
  31.       
  32.       
  33.     int nSize = vecClassA.size();  
  34.   
  35.     cout<<"vecClassA:"<<endl;  
  36.   
  37.     //打印vecClassA,方法一:  
  38.     for(int i=0;i<nSize;i++)  
  39.     {  
  40.         cout<<vecClassA[i].n<<"     ";  
  41.     }  
  42.     cout<<endl;  
  43.   
  44.     //打印vecClassA,方法二:    
  45.     for(int i=0;i<nSize;i++)  
  46.     {  
  47.         cout<<vecClassA.at(i).n<<"     ";  
  48.     }  
  49.     cout<<endl;  
  50.   
  51.     //打印vecClassA,方法三:  
  52.     for(vector<A>::iterator it = vecClassA.begin();it!=vecClassA.end();it++)  
  53.     {  
  54.         cout<<(*it).n<<"     ";  
  55.     }  
  56.     cout<<endl;  
  57.       
  58.     return 0;  
  59. }  

3.修改元素


修改元素方法有三:1.数组修改 2.引用修改3.迭代器修改

  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6.   
  7. int main()  
  8. {  
  9.       
  10.     //int型vector,包含3个元素  
  11.     vector<int> vecIntA;  
  12.   
  13.     //插入1 2 3  
  14.     vecIntA.push_back(1);  
  15.     vecIntA.push_back(2);  
  16.     vecIntA.push_back(3);  
  17.       
  18.     int nSize = vecIntA.size();  
  19.   
  20.     //通过引用修改vector  
  21.     cout<<"通过数组修改,第二个元素为8:"<<endl;  
  22.     vecIntA[1]=8;  
  23.   
  24.     cout<<"vecIntA:"<<endl;  
  25.     //打印vectorA  
  26.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  27.     {  
  28.         cout<<*it<<"     ";  
  29.     }  
  30.     cout<<endl;  
  31.       
  32.     //通过引用修改vector  
  33.     cout<<"通过引用修改,第二个元素为18:"<<endl;  
  34.     int &m = vecIntA.at(1);  
  35.     m=18;  
  36.   
  37.     cout<<"vecIntA:"<<endl;  
  38.     //打印vectorA  
  39.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  40.     {  
  41.         cout<<*it<<"     ";  
  42.     }  
  43.     cout<<endl;  
  44.   
  45.     //通过迭代器修改vector  
  46.     cout<<"通过迭代器修改,第二个元素为28"<<endl;  
  47.     vector<int>::iterator itr = vecIntA.begin()+1;  
  48.     *itr = 28;  
  49.   
  50.     cout<<"vecIntA:"<<endl;  
  51.     //打印vectorA  
  52.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  53.     {  
  54.         cout<<*it<<"     ";  
  55.     }  
  56.     cout<<endl;  
  57.   
  58.     return 0;  

运行结果:

4.删除


删除向量主要通过erase和pop_back 

  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6.   
  7. int _tmain(int argc, _TCHAR* argv[])  
  8. {  
  9.       
  10.     //int型vector,包含3个元素  
  11.     vector<int> vecIntA;  
  12.   
  13.     //循环插入1 到10  
  14.     for(int i=1;i<=10;i++)  
  15.     {  
  16.         vecIntA.push_back(i);  
  17.     }  
  18.       
  19.     vecIntA.erase(vecIntA.begin()+4);  
  20.           
  21.     cout<<"删除第5个元素后的向量vecIntA:"<<endl;  
  22.     //打印vectorA  
  23.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  24.     {  
  25.         cout<<*it<<"\t";  
  26.     }  
  27.     cout<<endl;  
  28.   
  29.     //删除第2-5个元素  
  30.     vecIntA.erase(vecIntA.begin()+1,vecIntA.begin()+5);  
  31.   
  32.     cout<<"删除第2-5个元素后的vecIntA:"<<endl;  
  33.     //打印vectorA  
  34.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  35.     {  
  36.         cout<<*it<<"\t";  
  37.     }  
  38.     cout<<endl;  
  39.   
  40.     //删除最后一个元素  
  41.     vecIntA.pop_back();  
  42.   
  43.     cout<<"删除最后一个元素后的vecIntA:"<<endl;  
  44.     //打印vectorA  
  45.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  46.     {  
  47.         cout<<*it<<"\t";  
  48.     }  
  49.     cout<<endl;  
  50.   
  51.     return 0;  
  52. }  

运行结果:

 文章转载:

vector容器用法详解 - 蒲公英110 - 博客园 (cnblogs.com)

  • 28
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 39
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值