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

vector类被称为带菌者类,它了解了独一静态队列,元素总额兑换的宾语队列。像独一队列,vector类也用从0开端的下标表现元素的定位;但它在不同的队列,当vector宾语创办后,队列的元素号码会跟随vector宾语元素号码的增大和减少而非本意的动作兑换。

    vector类经用的功用列举如下所示:

    1。建造物功用

  • vector():创办独一空vector
  • vector(int nSize):创办独一vector,元素的总额是nSead
  • vector(int nSize,const t& t):创办独一vector,元素的总额是nSead,值是t
  • vector(const vector&):副本建造物功用
  • vector(begin,完毕:副本[开端],end)区间内另独一队列的元素到vector中

    2。附加功用

  • void push_back(const T& x):元素x被添加到带菌者的侦察队两两散开。
  • iterator 拔出(迭代器) it,const T& x):带菌者击中要害迭代器在标点t先前将元素添加到x中。
  • iterator 拔出(迭代器) it,int n,const T& X):带菌者击中要害迭代器在标点
  • iterator 拔出(迭代器) it,const_iterator first,const_iterator last):带菌者中迭代器标点元素前拔出另独一平等的典型带菌者的[first,标明私下的充分地一次)

  三。剔除功用

  • iterator 磨蚀(迭代器) 剔除带菌者击中要害迭代器标点元素
  • iterator 磨蚀(迭代器) first,iterator 充分地):剔除带菌者击中要害第独一,充分地的元素)
  • void POPYBACK():剔除带菌者击中要害充分地独一元素
  • void 重行安装():空带菌者击中要害全部元素

  4。遍历功用

  • reference AT(int) 使恢复原状POS定位元素的援用
  • reference 前():对第独一元素的援用
  • reference 使恢复原状():援用尾元素
  • iterator 开端():使恢复原状带菌者头交给,标点第独一元素
  • iterator 完毕():使恢复原状到带菌者尾交给,标点带菌者的充分地独一元素的下独一定位。
  • reverse_iterator Rbegin():反向迭代器,标点充分地独一元素
  • reverse_iterator RAND():反向迭代器,首要的元素先前的定位

  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):集中带菌者击中要害n个元素的值是x
  • void assign(const_iterator first,const_iterator 充分地):[带菌者击中要害第独一],充分地的元素)设置成流传的带菌者元素

示例:

  1。设定初值示例

  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.     int iAlx[]= { 2,4,6};  
  25.     
  26.     vector<int> vecIntD(iArray,iArray+3);  
  27.   
  28.     
  29.     
  30.   
  31.     cout<<“vecIntA:”<
  32.     for(vector<It>::迭代器i=();!=();it++)  
  33.     {  
  34.         cout<<*it<<”     “;  
  35.     }  
  36.     cout<
  37.   
  38.     
  39.     cout<<“VecIntB:”<
  40.     for(vector<It>::迭代器i=();!=();it++)  
  41.     {  
  42.         cout<<*it<<”     “;  
  43.     }  
  44.     cout<
  45.   
  46.     
  47.     cout<<“VecIntB:”<
  48.     for(vector<It>::迭代器i=();!=();it++)  
  49.     {  
  50.         cout<<*it<<”     “;  
  51.     }  
  52.     cout<
  53.   
  54.     
  55.     cout<<“vecIntD:”<
  56.     for(vector<It>::迭代器i=();!=();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;i
  26.     {  
  27.         cout<”     “;  
  28.     }  
  29.     cout<
  30.   
  31.     
  32.     for(int i=0;i
  33.     {  
  34.         cout<<(i)<<”     “;  
  35.     }  
  36.     cout<
  37.   
  38.     
  39.     for(vector<It>::迭代器i=();!=();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.     国际互联网
  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;i
  41.     {  
  42.         cout<”     “;  
  43.     }  
  44.     cout<
  45.   
  46.     
  47.     for(int i=0;i
  48.     {  
  49.         cout<<(i).n<<”     “;  
  50.     }  
  51.     cout<
  52.   
  53.     
  54.     for(vector迭代器IT =();!=();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.     国际互联网
  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. A*A1新A(1)
  26. A*A2新A(2)
  27. A*A3新A(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;i
  41.     {  
  42.         cout<n<<“\t”;  
  43.     }  
  44.     cout<
  45.   
  46.     
  47.     for(int i=0;i
  48.     {  
  49.         cout<<(i)->n<<“\t”;  
  50.     }  
  51.     cout<
  52.   
  53.     
  54.     for(vector迭代器IT =();!=();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>::迭代器i=();!=();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>::迭代器i=();!=();it++)  
  42.     {  
  43.         cout<<*it<<”     “;  
  44.     }  
  45.     cout<
  46.   
  47.     
  48.     cout<<经过迭代器合适的,第二的个元素是28<
  49.     vector<It>::迭代器ITR=() 1
  50. ITR=28
  51.   
  52.     cout<<“vecIntA:”<
  53.     
  54.     for(vector<It>::迭代器i=();!=();it++)  
  55.     {  
  56.         cout<<*it<<”     “;  
  57.     }  
  58.     cout<
  59.   
  60.     return 0;  
  61. }  

顺序的出路列举如下:

4。剔除带菌者的状况

剔除带菌者首要经过磨蚀和POPFACK。,示例信号列举如下

  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<<剔除带菌者VECITNA:第五元素然后<
  24.     
  25.     for(vector<It>::迭代器i=();!=();it++)  
  26.     {  
  27.         cout<<*it<<“\t”;  
  28.     }  
  29.     cout<
  30.   
  31.     
  32.     (()+1,()+5);  
  33.   
  34.     cout<<剔除VECITNA:2-5个元素然后<
  35.     
  36.     for(vector<It>::迭代器i=();!=();it++)  
  37.     {  
  38.         cout<<*it<<“\t”;  
  39.     }  
  40.     cout<
  41.   
  42.     
  43.     ();  
  44.   
  45.     cout<<剔除VeCITA:在充分地独一元素然后。<
  46.     
  47.     for(vector<It>::迭代器i=();!=();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个粘性挡住通路,并将值放入第第五内存挡住通路中。

   一句话,当电阻丝被发达时,出路超越了流传的性能,性能将非本意的动作拉长说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. 先生(弦),字母串名,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.         INTI
  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.         使恢复原状S
  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. }  

信号运转探察列举如下:

发表评论

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