1.STL容器分類:
STL的容器可以分爲以下幾個大類:
一 順序(序列)容器, 有vector, list, deque, string,stack( 適配器類), queue( 適配器類), priority queues( 適配器類)
二 關聯容器, 有set, multiset, map, multimap, bitset,hash_set, hash_map, hash_multiset, hash_multimap
2.容器比較
vector | deque | list | set | multiset | map | multimap | |
名稱 | 向量容器 | 雙向隊列容器 | 列表容器 | 集合 | 多重集合 | 映射 | 多重映射 |
內部數 據結構 |
連續存儲的數組形式(一端開口的組) |
連續或分段連續存儲數組(兩端 開口的數組) |
雙向環狀鏈表 | 紅黑樹(平衡檢索二叉樹) | 紅黑樹 | 紅黑樹 | 紅黑樹 |
|
|||||||
頭文件 | #include <vector> | #include <deque> | #include <list> | #include <set> | #include <set> | #include <map> | #include <map> |
操作元素的方式 | 下標運算符:[0](可以用迭代器,但插入刪除操作時會失效) |
下標運算符或迭代器 |
只能用迭代器(不斷用變量值來遞推新值,相當於指針),不支持使用下標運算符 |
迭代器 | 迭代器 | 迭代器 | 迭代器 |
插入刪除操作迭代器是否失效 | 插入和刪除元素都會使迭代器失效 | 插入任何元素都會使迭代器失效。刪除頭和尾元素,指向被刪除節點迭代器失效,而刪除中間元素會使所有迭代器失效 | 插入,迭代器不會失效。刪除,指向被刪除節點迭代器失效 | 插入,迭代器不會失效。刪除,指向被刪除節點迭代器失效 | 插入,迭代器不會失效。刪除,指向被刪除節點迭代器失效 | 插入,迭代器不會失效。刪除,指向被刪除節點迭代器失效 | 插入,迭代器不會失效。刪除,指向被刪除節點迭代器失效 |
3.各容器特點比較以及選擇
vector | deque | list | set | multiset | map | multimap | |
名稱 | 向量容器 | 雙向隊列容器 | 列表容器 | 集合 | 多重集合 | 映射 | 多重映射 |
特點 |
增加和獲取元素效率 很高,插入和刪除的 效率很低
|
增加和獲取元素效率 較高,插入和刪除的 效率較高
|
增加和獲取元素效率 很低,插入和刪除的 效率很高 |
1.鍵(關鍵字)和值(數據)相等(就是模版只有一個參數,鍵和值合起來) 2.鍵唯一 3.元素默認按升序排列 |
1.鍵和值相等 2.鍵可以不唯一 3.元素默認按升序排列 |
1.鍵和值分開(模版有兩個參數,前面是鍵後面是值) 2.鍵唯一 3.元素默認按鍵的升序排列 |
1.鍵和值分開 2.鍵可以不唯一 3.元素默認按鍵的升序排列 |
定義容器 |
vector<string> book(50); | deque<string> book(50); | list<string> book; | set<string> book; | multiset<string> book; | map<int,string> book; | multimap<int,string> book; |
4.各容器的圖表說明
4.1 vector
4.2 deque
4.3 list
4.4 map/multimap
4.5 set/multiset
轉載自:http://blog.csdn.net/longhuahaha/article/details/8365041