vector容器用法详解 – 蒲公英110

vector类叫做矢径类,它变卖每一静态一大批。,抱反感,用于更改一大批元素的数量。。像每一一大批,vector类也用从0开端的下标表现元素的获名次;而是一大批是有区别的的,当vector抱反感使成为后,一大批的元素标号会跟随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)区间内另每一一大批的元素到vector中

    2。夸大效能

  • void push_back(const T& x):加X元素带菌者尾
  • iterator (拔出迭代器 it,const T& x:在添加元素x从前对元素举行矢径迭代器
  • iterator (拔出迭代器 it,int n,const T& x):在带菌者迭代器加N个相反的元素,X,此后用手指T
  • iterator (拔出迭代器 it,const_iterator first,const_iterator last):矢径中迭代器要点元素前拔出另每一相反典型矢径的[first,记载暗打中上个)

  三.裁剪效能

  • iterator 经受磨损(迭代器 它):裁剪迭代器要点的元素的矢径
  • iterator 经受磨损(迭代器 first,iterator 上个每一):裁剪带菌者[最初,元素在上个)
  • void (pop_back):裁剪上个每一元素的矢径
  • void (清空):空矢径打中持有违禁物元素

  4。遍历职务

  • reference 在(int POS):又来要点POS获名次元素的援用
  • reference (前):又来每一援用的第每一元素
  • reference (回):归尾元素
  • iterator (开端):头部方针矢径的又来,要点第每一元素
  • iterator 完毕():又来到矢径臀部方针,要点下每一获名次的矢径的上个每一元素。
  • reverse_iterator Rbegin():反向迭代器,要点上个每一元素
  • reverse_iterator (撕):反向迭代器,最初元素从前的获名次

  5。断定效能

  • bool empty() 要决定条件空搬运器复原物,倘若它是空的,矢径打中若干元素

  6。按大小排列效能

  • int size() 在矢径的元素标号:又来const
  • int capacity() Const:又来出席的矢径张的最大元素。
  • int max_size() const:又来最大可容许的vector元素数量值

  7。对立面效能

  • void swap(vector&):替换两个同典型矢径的记载
  • void 分派(int n,const T& x:将矢径设置为x的第每一n个元素。
  • void assign(const_iterator first,const_iterator 上个):矢径[最初,元素在上个)设置成出席的矢径元素

示例:

  1。initialization example

  1. #include “”  
  2. #include  
  3. #include  
  4.   
  5. using namespace std;  
  6.   
  7. class A  
  8. {  
  9.     
  10. };  
  11. int _tmain(int argc, _TCHAR* argv[])  
  12. {  
  13.       
  14.     
  15.     vector<int> vecInt;  
  16.   
  17.     
  18.     vector<float> vecFloat;  
  19.   
  20.     
  21.     vector vecA;  
  22.   
  23.     
  24.     vector vecPointA;  
  25.   
  26.     return 0;  
  27. }  

  1.   
  2. #include “”  
  3. #include  
  4. #include  
  5.   
  6. using namespace std;  
  7.   
  8. class A  
  9. {  
  10.     
  11. };  
  12. int _tmain(int argc, _TCHAR* argv[])  
  13. {  
  14.       
  15.     
  16.     vector<int> vecIntA(3);  
  17.       
  18.     
  19.     vector<int> vecIntB(3,9);  
  20.   
  21.     
  22.     vector<int> vecIntC(vecIntB);  
  23.       
  24.     国际iarray [ ] = { 2,4,6};  
  25.     
  26.     vector<int> vecIntD(iArray,iArray+3);  
  27.   
  28.     
  29.     
  30.   
  31.     cout<<“vecIntA:”<
  32.     for(vector<迭代器(=);!=();it++)  
  33.     {  
  34.         cout<<*it<<”     “;  
  35.     }  
  36.     cout<
  37.   
  38.     
  39.     cout<<“VecIntB:”<
  40.     for(vector<迭代器(=);!=();it++)  
  41.     {  
  42.         cout<<*it<<”     “;  
  43.     }  
  44.     cout<
  45.   
  46.     
  47.     cout<<“VecIntB:”<
  48.     for(vector<迭代器(=);!=();it++)  
  49.     {  
  50.         cout<<*it<<”     “;  
  51.     }  
  52.     cout<
  53.   
  54.     
  55.     cout<<“vecIntD:”<
  56.     for(vector<迭代器(=);!=();it++)  
  57.     {  
  58.         cout<<*it<<”     “;  
  59.     }  
  60.     cout<
  61.     return 0;  
  62. }  

该整理的坐果列举如下:

下面的密码用了4种方法引起vector并对其设定初值

  2。添加元素和成功的建议:

  1.   
  2. #include “”  
  3. #include  
  4. #include  
  5.   
  6. using namespace std;  
  7.   
  8.   
  9. int _tmain(int argc, _TCHAR* argv[])  
  10. {  
  11.       
  12.     
  13.     vector<int> vecIntA;  
  14.   
  15.     
  16.     (1);  
  17.     (2);  
  18.     (3);  
  19.       
  20.     int nSize = ();  
  21.   
  22.     cout<<“vecIntA:”<
  23.   
  24.     
  25.     for(int i = 0;我
  26.     {  
  27.         cout<”     “;  
  28.     }  
  29.     cout<
  30.   
  31.     
  32.     for(int i = 0;我
  33.     {  
  34.         cout<<(i)<<”     “;  
  35.     }  
  36.     cout<
  37.   
  38.     
  39.     for(vector<迭代器(=);!=();it++)  
  40.     {  
  41.         cout<<*it<<”     “;  
  42.     }  
  43.     cout<
  44.       
  45.     return 0;  
  46. }  

在积分矢径类上运转的密码。,构成释义了一类矢径塑体元件,此后拔出值3。,输入采取的是3种有区别的的方法,顺序的坐果列举如下:

  1.   
  2. #include “”  
  3. #include  
  4. #include  
  5.   
  6. using namespace std;  
  7.   
  8. class A  
  9. {  
  10. public:  
  11.     int n
  12. public:  
  13.     A(int n)
  14.     {  
  15.         this->n = n;  
  16.     }  
  17. };  
  18.   
  19. int _tmain(int argc, _TCHAR* argv[])  
  20. {  
  21.       
  22.     
  23.     vector vecClassA;  
  24.   
  25. A1(1)
  26. 每一A2(2)
  27. A3(3)
  28.   
  29.     
  30. (A1)
  31. (A2)
  32. (A3)
  33.       
  34.       
  35.     int nSize = ();  
  36.   
  37.     cout<<“vecClassA:”<
  38.   
  39.     
  40.     for(int i = 0;我
  41.     {  
  42.         cout<”     “;  
  43.     }  
  44.     cout<
  45.   
  46.     
  47.     for(int i = 0;我
  48.     {  
  49.         cout<<(i).n<<”     “;  
  50.     }  
  51.     cout<
  52.   
  53.     
  54.     for(vector迭代器它=();它!=();it++)  
  55.     {  
  56.         cout<<(*it).n<<”     “;  
  57.     }  
  58.     cout<
  59.       
  60.     return 0;  
  61. }  

下面的密码构成释义元素一类矢径,传球拔出3设定初值类,传球输入的3种方法,运转坐果列举如下:

  1.   
  2. #include “”  
  3. #include  
  4. #include  
  5.   
  6. using namespace std;  
  7.   
  8. class A  
  9. {  
  10. public:  
  11.     int n
  12. public:  
  13.     A(int n)
  14.     {  
  15.         this->n = n;  
  16.     }  
  17. };  
  18.   
  19. int _tmain(int argc, _TCHAR* argv[])  
  20. {  
  21.       
  22.     
  23.     vector vecClassA;  
  24.   
  25. * A1新A(1)
  26. * A2新一(2)
  27. * A3新一(3)
  28.   
  29.     
  30. (A1)
  31. (A2)
  32. (A3)
  33.       
  34.       
  35.     int nSize = ();  
  36.   
  37.     cout<<“vecClassA:”<
  38.   
  39.     
  40.     for(int i = 0;我
  41.     {  
  42.         cout<n<<“\t”;  
  43.     }  
  44.     cout<
  45.   
  46.     
  47.     for(int i = 0;我
  48.     {  
  49.         cout<<(i)->n<<“\t”;  
  50.     }  
  51.     cout<
  52.   
  53.     
  54.     for(vector迭代器它=();它!=();it++)  
  55.     {  
  56.         cout<<(**it).n<<“\t”;  
  57.     }  
  58.     cout<
  59.     裁剪A1裁剪A2裁剪A3
  60.     return 0;  
  61. }  

从一边至另一边密码传球构成释义每一类方针的矢径元素,传球拔出3设定初值类方针,传球输入的3种方法方针要点的类,运转坐果列举如下:

  三.建议

更新元素有三种次要方法:1。传球衣服变美,2。传球商量,三.传球更新迭代器

  1.   
  2. #include “”  
  3. #include  
  4. #include  
  5.   
  6. using namespace std;  
  7.   
  8.   
  9. int _tmain(int argc, _TCHAR* argv[])  
  10. {  
  11.       
  12.     
  13.     vector<int> vecIntA;  
  14.   
  15.     
  16.     (1);  
  17.     (2);  
  18.     (3);  
  19.       
  20.     int nSize = ();  
  21.   
  22.     
  23.     cout<<传球附近的交替,秒个元素是8:”<
  24.     vecIntA[1]=8;  
  25.   
  26.     cout<<“vecIntA:”<
  27.     
  28.     for(vector<迭代器(=);!=();it++)  
  29.     {  
  30.         cout<<*it<<”     “;  
  31.     }  
  32.     cout<
  33.       
  34.     
  35.     cout<<已知数更新,秒单元18:”<
  36.     int &m = (1);  
  37.     m=18;  
  38.   
  39.     cout<<“vecIntA:”<
  40.     
  41.     for(vector<迭代器(=);!=();it++)  
  42.     {  
  43.         cout<<*it<<”     “;  
  44.     }  
  45.     cout<
  46.   
  47.     
  48.     cout<<更新传球迭代器,秒个元素是28<
  49.     vector<int >::迭代器ITR =() 1
  50. ITR = 28
  51.   
  52.     cout<<“vecIntA:”<
  53.     
  54.     for(vector<迭代器(=);!=();it++)  
  55.     {  
  56.         cout<<*it<<”     “;  
  57.     }  
  58.     cout<
  59.   
  60.     return 0;  
  61. }  

顺序的坐果列举如下:

4。将范本矢径

裁剪搬运器次要传球经受磨损和pop_back,示例密码列举如下

  1.   
  2. #include “”  
  3. #include  
  4. #include  
  5.   
  6. using namespace std;  
  7.   
  8.   
  9. int _tmain(int argc, _TCHAR* argv[])  
  10. {  
  11.       
  12.     
  13.     vector<int> vecIntA;  
  14.   
  15.     
  16.     for(int = i 1;i<=10;i++)  
  17.     {  
  18.         (i);  
  19.     }  
  20.       
  21.     (()+4);  
  22.           
  23.     cout<<裁剪带菌者vecinta:传球第五元素<
  24.     
  25.     for(vector<迭代器(=);!=();it++)  
  26.     {  
  27.         cout<<*it<<“\t”;  
  28.     }  
  29.     cout<
  30.   
  31.     
  32.     (()+1,()+5);  
  33.   
  34.     cout<<裁剪vecinta:2-5元后<
  35.     
  36.     for(vector<迭代器(=);!=();it++)  
  37.     {  
  38.         cout<<*it<<“\t”;  
  39.     }  
  40.     cout<
  41.   
  42.     
  43.     ();  
  44.   
  45.     cout<<裁剪vecinta:上个每一元素较晚地。<
  46.     
  47.     for(vector<迭代器(=);!=();it++)  
  48.     {  
  49.         cout<<*it<<“\t”;  
  50.     }  
  51.     cout<
  52.   
  53.     return 0;  
  54. }  

顺序的坐果列举如下:

3.的比较级默认vector,列举如下图所示:

    当担当管理人密码vector v(2,5)当,2塑体元无用的东西内存设置,的值是5。添加每一元素时,原始无用的东西由2个顺序设计的4个压塑性元素无用的东西结合。,与1元为第三塑体无用的东西,月的第四日无用的东西预留无用的东西。添加2个元素时,直地在月的第四日无用的东西的值为2。3当添加元素,因结果是的矢径不预留无用的东西,内存无用的东西从4个反而8个塑体无用的东西。,第5美元钞票内存无用的东西打中值。

   一句话,拓展新的元素,倘若流量超越,量将自动化机器或设备扩张物2倍。,倘若2倍的能耐依然不可。,持续扩张物2倍。这是每一新的无用的东西,直地绘制在原无用的东西的依据。,实则,它更复杂。,包孕重行设定、元素酒、减轻无用的东西的列队行进。所以对vector包裹说起,当添加新的元素,能够很快取得(直地预约无用的东西),可以生产缓慢(后扩张);更新元素值更快。;裁剪元素,删弱尾元素更快,无尾元素略慢,因它触及酒元件的脱漏。

4。专业综合考试判例

  1.   
  2. #include “”  
  3. #include  
  4. #include  
  5. #include  
  6. using namespace std;  
  7.   
  8. class Student  
  9. {  
  10. public:  
  11.     string m_strNO;  
  12.     string m_strName;  
  13.     string m_strSex;  
  14.     string m_strDate;  
  15. public:  
  16. 先生(字母行strno,有区别的的字母行,string strSex,string strDate)  
  17.     {  
  18.         m_strNO = strNO;  
  19.         m_strName = strName;  
  20.         m_strSex = strSex;  
  21.         m_strDate = strDate;  
  22.     }  
  23.     无效的的显示
  24.     {  
  25.         cout<“\t”;  
  26.         cout<“\t”;  
  27.         cout<“\t”;  
  28.         cout<“\t”;  
  29.     }  
  30. };  
  31.   
  32. class StudCollect  
  33. {  
  34.     vector m_vStud;  
  35. public:  
  36.     添加(先生的)
  37.     {  
  38.         (s);  
  39.     }  
  40.     Student* Find(string strNO)  
  41.     {  
  42.         bool bFind = false;  
  43.         int i
  44.         for(i = 0;i < ();i++)  
  45.         {  
  46.             Student& s = (i);  
  47.             if( == strNO)  
  48.             {  
  49.                 bFind = true;  
  50.                 break;  
  51.             }  
  52.         }  
  53. 先生=零
  54.         if(bFind)  
  55.             s = &(i);  
  56.         又来的
  57.     }  
  58. };  
  59.   
  60. int _tmain(int argc, _TCHAR* argv[])  
  61. {  
  62. 先生S1“1001”,“zhangsan”,“boy”,“1988-10-10”);     
  63. 先生S2“1002”,“lisi”,“boy”,“1988-8-25”);  
  64. 先生S3“1003”,“wangwu”,“boy”,“1989-2-14”);  
  65.   
  66.     StudCollect s;  
  67. (S1)
  68. (S2)
  69. (S3)
  70.   
  71. 先生PS“1002”);  
  72.     倘若(PS)
  73.         ps->Display();  
  74.     return 0;  
  75. }  

密码运转判例列举如下:

发表评论

电子邮件地址不会被公开。 必填项已用*标注