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

STL 容器完整指南:迭代器、配置器與容器選型策略

     編輯:關於C語言

一、迭代器:統一容器遍歷介面

迭代器是類指標物件,讓演算法能以統一方式操作不同容器。依能力分五類:

類別支援操作典型容器
輸入迭代器單向唯讀istream_iterator
輸出迭代器單向唯寫ostream_iterator
前向迭代器單向讀寫forward_list
雙向迭代器雙向讀寫list, set, map
隨機存取迭代器任意跳躍vector, deque, array

常用輔助迭代器

  • back_insert_iterator:透過 push_back 插入
  • front_insert_iterator:透過 push_front 插入
  • insert_iterator:透過 insert 插入
  • reverse_iterator:反向遍歷

二、配置器:記憶體管理抽象層

標準 std::allocator<T> 封裝了記憶體配置、建構、銷毀、釋放等操作,關鍵介面:

  • allocate(n):配置未初始化記憶體
  • construct(p, val):在記憶體上建構物件
  • destroy(p):呼叫解構函數
  • deallocate(p, n):釋放記憶體
  • rebind<U>::other:型別重綁定,支援容器內部節點配置

容器透過模板參數注入配置器,實現記憶體策略客製化(如記憶體池、共享記憶體)。

三、標準容器分類與特性

序列式容器

容器底層結構特點適用場景
vector動態陣列隨機存取 O(1),尾端增刪 O(1) 攤還,中間增刪 O(n)預設首選,需快速索引
deque分段連續陣列雙端增刪 O(1),隨機存取 O(1),無重新配置拷貝雙端操作頻繁、大量資料
list雙向鏈表任意位置增刪 O(1),不支援隨機存取大量中間插刪、穩定迭代器

關聯式容器

容器底層鍵值重複鍵查找複雜度
set紅黑樹鍵=值否O(log n)
multiset紅黑樹鍵=值是O(log n)
map紅黑樹鍵→值否O(log n)
multimap紅黑樹鍵→值是O(log n)

容器配接器

  • stack:LIFO,預設以 deque 實作
  • queue:FIFO,預設以 deque 實作
  • priority_queue:最大堆,預設以 vector 實作

四、容器共通介面

所有標準容器提供:建構/複製/解構、empty()、size()、max_size()、比較運算子、swap()、begin/end、rbegin/rend、clear()、erase() 等。

五、型別定義

標準化型別別名:value_type、reference、const_reference、iterator、const_iterator、reverse_iterator、difference_type、size_type,便於撰寫泛型程式碼。

六、選型決策樹

  1. 需關聯查找?→ map/set 系列
  2. 需固定大小、高效索引?→ array / vector
  3. 頻繁雙端操作?→ deque
  4. 頻繁中間插刪、需穩定迭代器?→ list
  5. 需自動排序、去重?→ set / map
  6. 需多鍵對應?→ multimap / multiset
  7. 僅需堆疊/佇列/優先權佇列語意?→ 配接器
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved