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

C++ 必知必會 (四):STL 核心思想與三大組件架構

     編輯:關於C++

STL 不只是庫,是一種設計哲學

STL 由三大核心組件構成,透過迭代器解耦,實現「容器與演算法互不相識」的極致泛化:

  • 容器:資料結構抽象(vector、list、map、set 等 7+1 標準容器)。
  • 演算法:操作抽象(sort、find、copy、transform 等 60+ 標準演算法)。
  • 迭代器:統一存取介面(輸入、輸出、前向、雙向、隨機存取 5 類),指標即隨機存取迭代器。

迭代器:連接容器與演算法的橋樑

std::vector<int> v = {3,1,4,1,5};
std::sort(v.begin(), v.end());  // 演算法只需迭代器對,不關心容器型別
std::list<int>  l = {3,1,4,1,5};
std::sort(l.begin(), l.end());  // 錯誤:list 迭代器非隨機存取,編譯期失敗

迭代器分類編碼了容器能力,演算法透過 iterator_traits 靜態斷言需求,實現編譯期安全。

容器分類與選擇指南

類別容器特性適用場景
序列式vector連續記憶體、隨機存取、尾端增刪 O(1)預設首選、需快速索引
list雙向鏈表、任意位置增刪 O(1)、無隨機存取頻繁中間插刪、穩定迭代器
關聯式map/set紅黑樹、有序、查找/插入/刪除 O(log n)鍵值對映射、有序集合
unordered_map/set哈希表、無序、平均 O(1)高頻查找、不需有序
容器配接器stack/queue/priority_queue封裝底層容器(預設 deque/vector)特定存取模式(LIFO/FIFO/優先權)

演算法運作模式

標準演算法接受 [first, last) 半開區間:

// 複製 v 所有元素到 l
std::copy(v.begin(), v.end(), std::back_inserter(l));

// 尋找第一個滿足條件的元素
auto it = std::find_if(v.begin(), v.end(), [](int x){ return x > 3; });

函數物件與配接器:靈活定制行為

  • 謂詞:回傳 bool 的函數物件(std::less、std::greater、Lambda)。
  • 配接器:std::bind、std::not_fn、std::mem_fn 組合現有可呼叫物件。
  • 容器配接器:std::stack、std::queue 修改容器介面語意。

STL 慣例:遵守即自由

  • 容器需定義嵌套型別:value_type、iterator、size_type 等。
  • 迭代器需支援對應操作:++、*、==、+n (隨機存取)。
  • 演算法依賴 iterator_traits 取得特性標籤。

違背慣例 = 放棄 STL 生態互操作性。

效能與優勢

  • 編譯期單態化 + 內聯優化,效能媲美專家手寫碼,優於一般團隊手寫。
  • 程式碼更簡潔、型別安全、可維護性高。
  • 廣泛使用 STL,是現代 C++ 專業開發者的基本素養。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved