C++一些標準模板容器簡要介紹(1)

  1. vector類型:



  1. vector是c++標準模板庫庫中得一員,使用的時候需要包含:#include <vector>頭文件


  2. vector是同一種數據類型的集合,每個成員都對應一個索引值。


  3. 標準庫會管理相關內存。


  4. vector不是一種數據類型,而是一個類模板。


  5. vector類型每一種實例都指定了他保存的數據類型。從而,vector<int>,vector<string>等是一種自定義的數據類型。


  6. vector的初始化方式:

       (1)使用默認初始化 vector<T> v1;  使用類型T的默認構造函數(如果類沒有定義默認構造函數,那麼標準庫仍然產生一個帶初始化值的對象。最好在自己的類中定義默認構造函數)。如果是內置類型的,那麼使用0值創建初始化

      (2)拷貝初始化vector<T> v1(v2); 使用這種方式的時候,v1和v2需要是同一種數據類型。

      (3)值初始化:vector<T> v1(n,t)或者vector<T> v2(t);



  7. vector對象和其他標準庫容器對象的一個重要屬性:運行時,高效添加元素


  8. vector支持的操作:vector<T> vec1;

      (1)vec1.empty()    如果vec1爲空,那麼返回true。否則返回false

      (2)vec1.size()      返回vec1中的元素的個數

      (3)vec1.push_back(v1)   在vec1的末尾添加v1

      (4)vec1[n]   返回vec1中第(n-1)個元素的值。n必須在小於vec1.size()

      (5)vec1 = vec2;   把vec1中得元素替換爲vec2的副本

      (6)vec1 == vec2;  如果vec1 等於vec2那麼返回true    

      (7)> , >= , < , <= , !=都和內置類型意義一樣。



  9. 對於size()函數,一般使用size_type保存,和string的size_type類似,需要指明你要使用的size_type是什麼類型的。

    vector<int> size_type;   //ok

    vector size_type;      //error

  10. 向vector添加元素:   push_back()函數。    

    vector <int> vec1;

    vec1.push_back(10);    //ok


  11. vector的下表操作不能提供添加元素的操作.下表操作只能獲取已經存在的元素。這一條的意思就是說如果對於一個vector<int> vec1 來說,如果這個vector中不存在元素,那麼如果想通過下表操作來個這個容器添加元素是不允許的。相反,如果這個元素現在已經確定,這個容器中又兩個元素 0 和 1,如果通過下表讓第一個元素的值變爲2是可以的, vec1[0] = 2;//ok。


  12. 特別需要強調的是對於vector來說,下表操作只能使用於確知已存在的元素


  13. 除了使用下標操作符訪問vector中得元素之外,標準庫還提供了另外一種方式:迭代器:

      1.定義:迭代器是一種檢查容器中元素並遍歷元素的一種數據類型。(這個定義適用於標準庫定義的容器)

      2.每種標準庫的容器都定義了對應的迭代器數據類型。vector<class T>::iterator MyIter;

      3.每個標準庫容器類型都定義了一個名爲iterator的成員,這裏的iterator與迭代器實際類型的含義相同。


  14. vector容器的begin和end操作。

    1. begin函數返回容器中指向第一個元素的迭代器.  

      vector<int>  MyVec(n,10);

      vector<int>::iterator MyIter;

      MyIter = MyVec.begin();  


end函數返回容器中指向最後一個元素的下一個位置的迭代器。通常end的操作結果叫做"超出末端迭代器",這個函數返回的迭代器指向的是一個不存在的元素。如果容器爲空,那麼MyVec.begin() == MyVec.end();迭代器類型可以使用解引用操作符(*) 來訪問迭代器所指向的元素。由於容器的end()函數返回的是超出末端元素的位置,所以不能對end()返回的迭代器作解引用操作。如果兩個迭代器執行同一個元素,那麼這兩個迭代器就相等。但是對於vector容器來說,兩個值相等的元素,他們對應的迭代器的值是不一樣的。(可以參照下邊代碼做一個實驗) vector<int> vec1; vec1.push_back(1); vec1.push_back(3); vec1.push_back(3); vector<int>::iterator it1, it2; it1 = vec1.begin(); it2 = vec1.begin() + 2; if (it1 == it2) cout << "yes" << endl; else cout << "no" << endl; 


    m. 使用迭代器重置容器元素的值和下表操作相似在容器中我們可以使用iterator來訪問或者改變元素的值,但是在某種狀況下,我們只希望這個迭代器能只訪問元素的值,但是不對元素的值進行更改,這個時候我們就需要使用const_iterator來實現。和普通的iterator唯一不同的是,我們使用const_iterator不能修改容器中元素的值,而只能訪問這個容器的值。  在具體的使用中,我們需要根據情況來選擇使用哪一種迭代器。


   


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