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 類別。
map 和 set 只允許索引鍵或項目的一個執行個體插入至容器。 如果需要項目的多個執行個體,請使用 multimap 或 multiset。 未排序的版本為 unordered_multimap 和 unordered_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 集合。 |