【C++】STL常用容器總結之二:順序容器

3、順序容器

所謂序列式容器,其中的元素都可序(ordered),但未必有序(sorted)。array爲C++語言內置的序列容器,STL另外提供vector、list、deque、stack、queue等等順序式容器。它們的差別在於訪問元素的方式,以及添加或刪除元素相關操作的運行代價。
標準庫還提供了三種容器適配器(adapter),所謂適配器是根據原始的容器類型所提供的操作,通過定義新的操作接口,來適應基礎的容器類型。順序容器適配器包括stack、queue、priority_queue等序列式容器。其中stack和queue由於只是將deque改頭換面而成,技術上被歸類爲一種適配器,priority_queue是有優先級管理的隊列。

1、順序容器的構造函數

順序容器主要介紹3種,即vector、list、deque,相應的頭文件爲:

 #include<vector>
 #include<list>
 #include<deque>

以下介紹的函數適用於所有順序容器(vector、list、deque),故在下文不再介紹。

C<T> c; 

創建一個名爲 c 的空容器。C 是容器類型名,如 vector,list,T 是元素類型,如 int 或 string。適用於所有容器。

C<T> c(c2);

創建容器 c2 的副本 c;c 和 c2 必須具有相同的容器類型,並存放相同類型的元素。適用於所有容器。

C<T> c(b, e);

創建 c,其元素是迭代器 b 和 e 標示的範圍內元素的副本。適用於所有容器。

C<T> c(n, t);

用 n 個值爲 t 的元素創建容器 c,其中值 t 必須是容器類型 C 的元素類型的值,或者是可轉換爲該類型的值。

C<T> c(n);  

只適用於順序容器,創建有 n 個值初始化元素的容器 c。

2、順序容器的一些其他操作

  • 將一個容器初始化爲另一個容器的副本
    當不使用默認構造函數,而是用其他構造函數初始化順序容器時,必須指出該容器有多少個元素,並提供這些元素的初值。同時指定元素個數和初值的一個方法是將新創建的容器初始化爲一個同類型的已存在容器的副本。將一個容器複製給另一個容器時,類型必須匹配:容器類型和元素類型都必須相同。
  • 初始化爲一段元素的副本
    儘管不能直接將一種容器內的元素複製給另一種容器,但是可以使用一對迭代器間接實現該功能。使用迭代器時,不要求容器類型相同,容器內的元素類型也可以不相同,只要他們相互兼容。迭代器標記了要複製的元素範圍,這些元素用於初始化新容器的元素。迭代器標記出要複製的第一個元素和最後一個元素。採用這種初始化形式可複製不能直接複製的容器。
  • 分配和初始化指定數目的元素
    創建順序容器時,可顯式指定容器大小和一個(可選的)元素初始化式。容器大小可以是常量或非常量表達式,元素初始化則必須是可用於初始化其元素類型的對象的值。 不提供元素初始化式時,標準庫將爲該容器實現值初始化。採用這種類型的初始化,元素類型必須是內置或複合類型,或者是提供了默認構造函數的類類型。如果元素類型沒有默認構造函數,則必須顯式指定其元素初始化式。接受容器大小做形參的構造函數只適用於順序容器,而關聯容器不支持這種初始化。

3、順序容器的一些其他函數

這裏寫圖片描述
這裏寫圖片描述
assign操作首先刪除容器內所有的元素,再將參數所指定的新元素插入到容器中。swap操作不會刪除或插入任何元素,而且保證在常量時間內實現交換。由於容器內沒有移動任何元素,因此迭代器不會失效。但要注意這些迭代器指向了另一個容器中的元素。

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