C++裏的vector用法,比數組方便很…

http://blog.csdn.net/xiejingfa/article/details/8884979

 在C++中,通常使用數組來存放一組具有相同數據類型的數據,但是數組在使用前必須先確定其大小。

STL中提供了vector類,即動態數組。既然是數組,vector自然具有數組的一些特徵,比如下標從零開始、

可以通過下標來訪問數組中的數據元素等,不同的是:vector具有容量動態增長的能力,而不像普通數組

一樣其容量一旦確定就不能修改。

 

      下面我們來學習一下vector的基本用法。

 

       vector類爲用戶提供了許多函數,比較常用的有以下:

 

1、構造函數

  1. vector()  
  2. //創建一個空的vector對象, T爲vector存放的元素類型(下同)  
  3. vector(int size)  
  4. //創建一個大小爲size的vector對象  
  5. vector(int size, T t)   
  6. //創建一個大小爲size, 各元素值均爲t的vector對象  

 

2、往vector中添加元素

  1. void push_back(T t)   
  2. //在vector的尾部增加一個元素  
  3. iterator insert(iterator iter, T t)   
  4. //在vector中某一元素前插入一個元素t,iterator爲迭代器  
  5. void insert(iterator iter, int n, T t)    
  6. //在vector中某一元素錢插入n個相同的元素t  
  7. void insert(iterator iter, iterator first, iterator last)    
  8. //在vector中某一元素錢插入另一個相同類型vector中[first, last)間的數據  


3、刪除元素

  1. iterator erase(iterator iter)  
  2. //刪除vector中某一個元素  
  3. iterator erase(iterator first, iterator last)  
  4. //刪除vector中[first, last)中的元素  
  5. void clear()  
  6. //刪除vector中的所有元素  


4、遍歷vector

  1. T at(int i)//返回下標爲i位置的元素  
  2. T front()//返回首元素  
  3. T back()//返回尾元素  
  4. iterator begin()//返回vector的頭指針,指向第一個元素  
  5. iterator end()//返回vector的尾指針,指向最後一個元素的下一個位置  
  6. reverse_iterator rbegin()//反向迭代器,返回最後一個元素的迭代指針  
  7. reverse_iterator rend()//反向迭代器, 返回第一個元素錢一個位置的迭代指針  


5、其他

  1. bool empty()//判斷vector是否爲空  
  2. int size()//返回vector中元素個數  
  3. int capacity()//返回當前vector的最大容量  
  4. void assign(int n, T t)//將vector中第n個元素設置爲t  


 

接下來通過一個具體的例子來看看上述函數的簡單用法

 

  1. #include  
  2. #include  
  3. using namespace std;  
  4.   
  5. int main(void) {  
  6.     //初始化vector  
  7.     vector<<span class="datatypes" style="margin: 0px; padding: 0px; border: none; color: rgb(46, 139, 87); background-color: inherit; font-weight: bold;">int> int_vec;  
  8.     //往vector中插入元素  
  9.     int_vec.push_back(1);  
  10.     int_vec.push_back(2);  
  11.     int_vec.push_back(3);  
  12.     int_vec.push_back(4);  
  13.     int_vec.push_back(5);  
  14.   
  15.     printf("\n下面測試輸出\n");  
  16.     int size = int_vec.size();  
  17.   
  18.     //  
  19.     printf("通過數組方式輸出\n");  
  20.     for(int i = 0; i < size; i++) {  
  21.         printf("%d  ", int_vec[i]);  
  22.     }  
  23.   
  24.     printf("\n通過引用方式輸出\n");  
  25.     for(int i = 0; i < size; i++) {  
  26.         printf("%d  ", int_vec.at(i));  
  27.     }  
  28.   
  29.     printf("\n通過迭代器輸出\n");  
  30.     vector<<span class="datatypes" style="margin: 0px; padding: 0px; border: none; color: rgb(46, 139, 87); background-color: inherit; font-weight: bold;">int>::iterator iter1 = int_vec.begin();  
  31.     while(iter1 != int_vec.end()) {  
  32.         printf("%d  ", *iter1);  
  33.         iter1++;  
  34.     }  
  35.   
  36.     printf("\n通過反向迭代器輸出\n");  
  37.     vector<<span class="datatypes" style="margin: 0px; padding: 0px; border: none; color: rgb(46, 139, 87); background-color: inherit; font-weight: bold;">int>::reverse_iterator iter2 = int_vec.rbegin();  
  38.     while(iter2 != int_vec.rend()) {  
  39.         printf("%d  ", *iter2);  
  40.         iter2++;  
  41.     }  
  42.   
  43.     printf("\n下面測試修改元素\n");  
  44.     printf("通過數組下標方式修改第一個元素。");  
  45.     int_vec[0] = 5;  
  46.     printf("修改後第一個元素爲:%d\n", int_vec[0]);  
  47.   
  48.     printf("通過引用方式修改第二個元素。");  
  49.     int &p = int_vec.at(1);  
  50.     p = 6;  
  51.     printf("修改後的第二個元素爲:%d\n", p);  
  52.   
  53.     printf("通過迭代器修改第三個元素。");  
  54.     vector<<span class="datatypes" style="margin: 0px; padding: 0px; border: none; color: rgb(46, 139, 87); background-color: inherit; font-weight: bold;">int>::iterator iter3 = int_vec.begin()+2;  
  55.     *iter3 = 7;  
  56.     printf("修改後第三個元素爲:%d\n", *iter3);  
  57.   
  58.     printf("\n下面測試刪除元素\n");  
  59.     printf("刪除第一個元素後,剩餘元素爲:  ");  
  60.     int_vec.erase(int_vec.begin());  
  61.     for(int i = 0; i < int_vec.size(); i++) {  
  62.         printf("%d  ", int_vec[i]);  
  63.     }  
  64.   
  65.     printf("\n刪除第1~3個元素後,剩餘元素爲:  ");  
  66.     int_vec.erase(int_vec.begin(), int_vec.begin()+2);  
  67.     for(int i = 0; i < int_vec.size(); i++) {  
  68.         printf("%d  ", int_vec[i]);  
  69.     }  
  70.   
  71.     return 0;  
  72. }  


 

輸出:

下面測試輸出
通過數組方式輸出
1  2  3  4  5
通過引用方式輸出
1  2  3  4  5
通過迭代器輸出
1  2  3  4  5
通過反向迭代器輸出
5  4  3  2  1
下面測試修改元素
通過數組下標方式修改第一個元素。修改後第一個元素爲: 5
通過引用方式修改第二個元素。修改後的第二個元素爲: 6
通過迭代器修改第三個元素。修改後第三個元素爲: 7

下面測試刪除元素
刪除第一個元素後,剩餘元素爲: 6  7  4  5
刪除第1~3個元素後,剩餘元素爲:  4  5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章