共用方式為


STL 容器

ISO 標準範本庫 (STL) 提供用來存放相關物件集合的容器。 容器是可指定容器中所允許之物件的範本類別。

注意事項注意事項

本文件不適用於 STL/CLR。如需詳細資訊,請參閱 STL/CLR 程式庫參考

STL 的容器可以分為三類:序列容器、關聯容器和容器配接器。

序列容器

序列容器維護您指定之插入項目的順序。

vector 容器的行為就像陣列,不過可以視需要自動擴增。 它是隨機存取和連續儲存,而且長度有高度彈性。 因此 (和基於其他原因),vector 是大多數應用程式慣用的序列容器。 如需詳細資訊,請參閱 vector 類別

array 容器具有 vector 的某些強項,不過,長度不如後者有彈性。 如需詳細資訊,請參閱 array 類別 (STL)

deque (雙向佇列) 容器允許在容器開頭和結尾快速插入和刪除。 它與 vector 有相同的隨機存取和彈性長度優點,但不是連續的。 如需詳細資訊,請參閱 deque 類別

list 容器是可在容器中任何位置雙向存取、快速插入和快速刪除的雙向連結清單,不過,您不能隨機存取容器中的項目。 如需詳細資訊,請參閱 list 類別

forward_list 容器是單向連結清單,即 list 的正向存取版本。 如需詳細資訊,請參閱 forward_list 類別

關聯容器

在關聯容器中,項目是依照預先定義的順序插入,例如,做為遞增排序。 未排序的關聯容器也可供使用。 關聯容器可分組為兩個子集:對應 (map) 和集合 (set)。

map 有時稱為字典,包含的索引鍵/值組。 索引鍵用於排序順序,而值與該索引鍵相關聯。 例如,map 可能包含索引鍵和對應值。前者表示文字中的每個唯一字詞,後者表示每個字詞顯示在文字中的次數。 map 未排序的版本為 unordered_map。 如需詳細資訊,請參閱 map 類別unordered_map 類別

set 只是唯一項目的遞增容器—值也是索引鍵。 set 未排序的版本為 unordered_set。 如需詳細資訊,請參閱 set 類別unordered_set 類別

mapset 只允許索引鍵或項目的一個執行個體插入至容器。 如果需要項目的多個執行個體,請使用 multimapmultiset。 未排序的版本為 unordered_multimapunordered_multiset。 如需詳細資訊,請參閱 multimap 類別unordered_multimap 類別multiset 類別unordered_multiset 類別

已排序的對應和集合支援雙向迭代器,而未排序的對應項目則支援正向迭代器。 如需詳細資訊,請參閱迭代器

容器配接器

容器配接器是為了簡化和清晰而限制介面的序列或關聯容器的變化。 容器配接器不支援迭代器。

queue 容器遵循 FIFO (先進先出) 語意。 第一個「推入」(push) (也就是插入佇列) 的項目是第一個「推出」(pop) (也就是從佇列移除) 的項目。 如需詳細資訊,請參閱 queue 類別

priority_queue 容器的排序方式會讓具有最大值的項目一定在佇列中的第一個。 如需詳細資訊,請參閱 priority_queue 類別

stack 容器遵循 LIFO (後進先出) 語意。 最後一個推入至堆疊的項目是第一個推出的項目。 如需詳細資訊,請參閱 stack 類別

由於容器配接器不支援迭代器,它們不能與 STL 演算法一起使用。 如需詳細資訊,請參閱演算法

容器項目的需求

一般而言,插入至 STL 容器的項目可以是任何可複製的物件類型。 僅可移動的項目 (例如,使用 unique_ptr<> 建立的項目如 vector<unique_ptr<T>>) 也能正常運作,只要您不會呼叫嘗試對其進行複製的成員函式。

不允許解構函式擲回例外狀況。

已排序的關聯容器 (本文件稍早所述) 必須已定義公用的比較運算子。根據預設,此運算子是 operator<,但是也支援不能搭配 operator< 一起使用的類型。

容器的某些作業可能也需要公用預設建構函式和公用等價運算子。 例如,未排序的關聯容器需要相等和雜湊支援。

存取容器項目

容器項目是透過使用迭代器進行存取。 如需詳細資訊,請參閱迭代器

注意事項注意事項

您也可以使用範圍架構的 for 迴圈來逐一查看 STL 集合。

請參閱

參考

標準樣板程式庫

<sample container>

C++ 標準程式庫中的執行緒安全

概念

容器 (現代 C++)