1. 程式人生 > >STL之順序容器

STL之順序容器

順序容器包括以下幾類:

1、vector

       可變大小陣列,可以理解為廣義的動態陣列,如:typename *a = new typename [N] 。因為,陣列是一組連續的儲存單元,所以可以通過陣列首地址+index來訪問其中元素,也即使支援快速隨機訪問在尾部之外的位置插入或者刪除元素可能會很慢。 這是因為,插入或者刪除都需要移動插入/刪除位置之後的元素。

·     vector是不支援push_front(),pop_front()操作的,原因可參考為什麼vector沒有push_front()和pop_front()操作?,但是同樣可以實現pop_front(),如下:

vector<int>  a;
a.push_back(1);
a.push_back(2);
a.erase(a.begin()); //返回下個一個元素的迭代器

2、string
    跟vector類似,但是是專門用來儲存字元的陣列。可快速隨機訪問。

3、array
    跟內建陣列一樣,有固定大小,宣告的時候需要說明大小、型別。如:array <typename,type_size> a;既然跟內建陣列一樣,那自然不支援刪除或者插入。但可以快速隨機訪問。

4、deque
    double-end queue(雙端佇列),就是支援隊首和隊尾刪除插入的佇列。支援快速隨機訪問。

5、list
    雙向連結串列,跟單向連結串列的區別在於,雙向連結串列可以雙向順序訪問。

6、forward_list
    單向連結串列,只支援單向順序訪問。

順序容器的共性:
      1)都是線性的、順序的,這中順序跟元素的值沒關係,跟元素加入容器時的位置相對應。

      2)都能支援大部分操作

順序容器操作歸類:

  1、類型別名

    iterator    迭代器   

    size_tpye      無符號整數型別

    differecne_type      有符號整形,儲存兩個迭代器直間的距離

    2、建構函式

     C     c;      預設建構函式,構造空容器

     C     c1(c2);      呼叫拷貝建構函式,構造C1

     C    c(beg,end);      將迭代器指定的範圍[beg,end)的元素拷貝到c中,array不支援

     C    c(num,data);      //用Num個data初始化

     C     c{a,b,c...} ;       用初始化列表(C++11)

   3、賦值

     c1 = c2;

     c1 = {a,b,c..};

    swap(a,b) 等價於 a.swap(b);

  4、更改容器內容

    insert();       //插入

    push_back();   //尾部插入

    pop_back();   //尾部刪除

    erase();     //刪除指定位置的元素

    emplace();   //替換,是erase()和Insert()的結合

    clear();     //清空

     5、獲取迭代器

     begin();      //第一個元素的迭代器

     end();   //最後一個元素的下一個位置的迭代器

     rbegin();         redn();    //反向迭代器

   6、獲得元素

     at();      //只有使用連續記憶體的才可以用at,如vector,string,deque,array

     *iterator;   //對有效的迭代器解引用

    back(); //尾部元素

    front();  //第一個元素

   7、容量

    resever();     //預先分配記憶體,不會減小已有的容量

    capacity();      //獲得當前容量

    size();     //當前元素個數

    shrink_to_fit();    //根據size()調整容量