走進 STL:快速導覽 C++ 標準模板庫的核心要素
STL 是什麼?
STL(Standard Template Library) 是 C++ 程式設計語言中一個非常重要和強大的函式庫,它提供了一系列資料結構,如向量(vector)、列表(list)和雜湊表(map),以及搜尋、排序等演算法和通用函式,可用於大幅簡化 C++ 程式開發。 STL 遵循泛型程式設計(Generic Programming) 的理念, 基於模板(Template) 來實作各種資料結構與演算法,這使得 STL 可以處理任何符合特定需求的資料類型,而不局限於特定的類型。這種泛型性增加了 STL 的可重用性和靈活性。
STL 的核心主要由以下幾大組建所組成:
- 容器 Container
- 演算法 Algorithms
- 迭代器 Iterator
- 仿函數 Functor
- 適配器 Adaptor
容器 Container
容器(Container)是 STL 中用於存放資 料的資料結構類別模板,每種容器都提供了特定資料結構的功能。
容器類型
STL 提供了以下幾種類型的容器:
- 序列容器(Sequence Containers)
- vector:表示可動態調整大小的陣列。支持快速隨機存取,但在中間插入或刪除元素可能會比較慢。
- deque:和
vector相似,但設計上支持在頭部和尾部高效插入和刪除。 - list:雙向鏈表,支持在任何位置快速插入和刪除,但不支持快速隨機存取。
- forward_list:僅支持向前遍歷的鏈表,相比
list更節省空間。
- 關聯容器(Associative Containers)
- 無序關聯容器(Unordered Associative Containers)
- unordered_set:基於哈希表的集合,元素唯一,不自動排序,提供快速查找。
- unordered_multiset:與
unordered_set相似,但元素可以重複。 - unordered_map:基於哈希表的鍵-值對集合,提供快速查找。
- unordered_multimap:與
unordered_map相似,但一個鍵可以關聯多個值。
容器操作方法
所有 STL 容器都提供了一些共通的操作,如:
- size():返回容器中元素的數量。
- empty():判斷容器是否為空。
- insert():插入元素到容器中。
- erase():刪除容器中的元素。
- clear():移除容器中所有元素。