C++ STL (Standard Template Library標準模板庫) 是通用類模板和算法的集
合,它提供給程序員一些標準的數據結構的實現如queues(隊列), lists(鏈表), 和
stacks(棧)等.
C++ STL 提供給程序員以下三種標準容器類的實現:
### 一、順序性容器(Sequence containers)
vector 從后面快速的插入與刪除,直接訪問任何元素
deque 從前面或后面快速的插入與刪除,直接訪問任何元素
list ? ? ?雙鏈表,從任何地方快速插入與刪除
array ?C++11
forward_list ?C++11
vector 是一段連續的內存塊,而deque 是多個連續的內存塊,list 是所有
數據元素分開保存,可以是任何兩個元素沒有連續。
vector 的訪問性能最好,并且在末端增加數據也很好,除非它重新申請內存
段;適合高效地隨機存儲。
list 是一個鏈表,任何一個元素都可以是不連續的,但它都有兩個指向上一
元素和下一元素的指針。所以它對插入、刪除元素性能是最好的,而查詢性能非
常差;適合大量地插入和刪除操作而不關心隨機存取的需求。
deque 是介于兩者之間,它兼顧了數組和鏈表的優點,它是分塊的鏈表和多
個數組的聯合。所以它有比list好的查詢性能,有比vector好的插入、刪除性能。
如果你需要隨即存取又關心兩端數據的插入和刪除,那么deque是最佳之選。
### 二、容器適配器Container adaptors
stack 后進先出
queue 先進先出
priority_queue 最高優先級元素總是第一個出列
### 三、關聯容器Associative containers
set 快速查找,不允許重復值
multiset 快速查找,允許重復值
map 一對多映射,基于關鍵字快速查找,不允許重復值
multimap 一對多映射,基于關鍵字快速查找,允許重復值
### 四、無序關聯容器Unordered associative containers(C++11)
故名思義,與關聯容器相比,未進行排序。
unordered_set 快速查找,不允許重復值
unordered_multiset 快速查找,允許重復值
unordered_map 一對多映射,基于關鍵字快速查找,不允許重復值
unordered_multimap 一對多映射,基于關鍵字快速查找,允許重復值
程序員使用復雜數據結構的最困難的部分已經由STL完成. 如果程序員想使用包
含int數據的stack, 他只要寫出如下的代碼:
stack<int> myStack;
接下來, 他只要簡單的調用push() 和pop() 函數來操作棧. 借助C++ 模板的
威力, 他可以指定任何的數據類型,不僅僅是int類型. STL stack實現了棧的功
能,而不管容納的是什么數據類型