首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C++ STL 容器選擇指南:vector/list/deque/關聯容器/適配器特點總結

     編輯:關於C語言

STL 提供豐富容器,選擇正確容器是性能與開發效率的關鍵。本文總結 15 種容器的底層結構、時間複雜度、迭代器失效規則、適用場景,助你快速決策。

1. 序列容器

容器底層結構隨機訪問頭/尾增刪中間增刪迭代器失效規則典型場景
vector動態數組O(1)尾 O(1) / 頭 O(n)O(n)擴容/插入/刪除導致後續元素失效默認首選、隨機訪問多、尾部操作多
deque分段數組O(1)頭尾 O(1)O(n)任何插入導致所有失效;頭尾刪除僅當前失效雙端隊列、需頭尾高效增刪
list雙向循環鏈表不支持O(1)O(1) (有迭代器)插入不失效;刪除僅當前失效頻繁中間增刪、無需隨機訪問
slist單向鏈表不支持僅頭部 O(1)O(1)同 list內存敏感、單向遍歷場景

2. 容器適配器(基於序列容器封裝)

適配器默認底層特點適用場景
stackdequeLIFO、只能訪問頂部、不可遍歷函數調用棧、表達式求值、DFS
queuedequeFIFO、只能訪問前後、不可遍歷BFS、任務隊列、生產消費
priority_queuevector堆實現、首元素最大、不可遍歷任務調度、Top-K、Dijkstra

3. 關聯容器(基於 RB-Tree / Hash Table)

容器底層鍵值關係鍵唯一性有序性查找/插入/刪除迭代器失效
setRB-Treekey=value唯一升序O(log n)刪除當前失效,其它不失效
multisetRB-Treekey=value可重複升序O(log n)同 set
mapRB-Treekey≠value唯一按 key 升序O(log n)同 set
multimapRB-Treekey≠value可重複按 key 升序O(log n)同 set
hash_setHash Tablekey=value唯一無序平均 O(1)同 set
hash_multisetHash Tablekey=value可重複無序平均 O(1)同 set
hash_mapHash Tablekey≠value唯一無序平均 O(1)同 set
hash_multimapHash Tablekey≠value可重複無序平均 O(1)同 set

4. 選擇決策樹

  1. 需隨機訪問、尾部操作多 → vector
  2. 需頭尾高效增刪 → deque
  3. 頻繁中間增刪、無隨機訪問 → list
  4. 需鍵值映射、有序遍歷 → map/set
  5. 需鍵值映射、極致查找速度、無序可接受 → unordered_map/set (C++11)
  6. 需棧/隊列/優先隊列語義 → stack/queue/priority_queue

5. 避坑提示

  • vector 預留 reserve() 避免頻繁擴容
  • deque 迭代器失效積極,遍歷中增刪需謹慎
  • 關聯容器迭代器穩定,適合長期持有
  • C++11 優先用 unordered_map/set 替代 hash_*(非標準)

總結

容器無優劣,只有適不適合。掌握底層結構與複雜度,根據訪問模式、修改頻率、有序需求、內存限制選型,是 C++ 工程師必備基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved