C++ 11 STL中常用容器分類和對比
阿新 • • 發佈:2019-01-09
STL容器分類
1,順序容器 sequence containers
- array
- vector
- deque
- list
- forward-list
2,關聯容器 associative containers(紅黑樹實現)
- set
- multiset
- map
- multimap
3,無序容器 unordered containers (hash表實現)(非標準,也可以劃分到關聯容器)
- hash_set
- hash_multiset
- hash_map
- hash_multimap
STL容器對比
容器的特性跟背後記憶體的分佈息息相關,從上圖可以很清晰的看出。
1,array、vector、deque的記憶體是連續的,連續的記憶體空間必定是支援隨機訪問的,其餘容器則不具備該特點。其中array為固定長度,vector、deque為變長,vector只能單向擴充,deque可以雙向擴充。
2,list、forward-list為鏈條式結構,這種結構在插入、刪除時只需要區域性調整非常方便。但是遍歷時只能按照鏈條順序依次遍歷,查詢起來並不迅速。
3,set、map背後的實現為紅黑樹,所以對查詢具有先天的優勢,但這種結構插入刪除時會產生聯動效應,所以並不適合做頻發的刪除、插入。其中各自multi版本表示內容可以重複。
另外發現有些網友的總結也很好,大家可以都看看便於理解:
- https://blog.csdn.net/gcs6564157/article/details/65443202
- https://blog.csdn.net/qq_14898543/article/details/51381642