一 、STL的誕生
????????在C++發展早期,程序員在不同的項目中需要反復編寫相似的數據結構和算法。重復開發帶來以下問題:
????????代碼冗余:每個項目都要重新實現基本數據結構和算法
????????維護困難:不同人編寫的代碼風格不一致,難以維護
????????效率低下:不同實現可能導致性能不穩定,難以優化
為了解決這些問題,1994年由Alexander Stepanov領導的團隊開發了STL。
二、STL基本概念
- STL(標準模板庫,Standard Template Library)
- 由多個模塊組成,包括容器(Containers)、算法(Algorithms)和迭代器(Iterators),加上一些額外的工具
- 容器和算法之間通過迭代器進行無縫銜接
- STL幾乎所有的代碼都采用了模板類或者模板函數
三、 STL核心組件
????????STL主要由六大部分組成:容器、算法、迭代器、適配器、函數對象、配置器。
????????1.容器(Containers)
????????????????提供多種數據結構,方便存儲和管理數據。常見容器包括:
容器類型 | 特點 | 常見容器 |
---|---|---|
序列式容器 | 按照順序存儲數據 | vector,deque,list,array |
關聯式容器 | 以鍵值對存儲數據,自動排序 | set,map,multiset,multimap |
無序容器 | 使用哈希表存儲數據,查找快 | unordered_set,unordered_map |
????????2.?算法(Algorithms)
????????提供大量常見算法,如排序、查找、修改等,使用時結合迭代器。
常見算法:
- 修改類:fill()、replace()、copy()
- 非修改類:find()、count()
- 排序類:sort()、stable_sort()
- 數值類:accumulate()(求和)、inner_produce()(內積)
????????3.?迭代器(Iterators)
????????用于遍歷容器中的元素,類似于指針,但更靈活,適用于STL容器。
迭代器類別 | 適用容器 | 功能 |
---|---|---|
輸入迭代器 | istream_iterator | 只能讀取 |
輸出迭代器 | ostream_iterator | 只能寫入 |
前向迭代器 | forward_list | 只能前進 |
雙向迭代器 | list,set,map | 可前進和后退 |
隨機訪問迭代器 | vector,deque,array | 可隨機訪問 |
????????4.?適配器(Adapters)
????????用于改變容器、迭代器或函數行為的工具。例如:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
- 容器適配器(
stack
、queue
、priority_queue
) - 迭代器適配器(
reverse_iterator
) - 函數適配器(
bind()
、mem_fn()
)
? ? ? ? 5、函數對象(Functors 仿函數)
????????是重載的類,可以像函數一樣被調用。可作為算法的某種策略。
? ? ? ? 6、適配器(Allocators)
????????STL提供的內存管理機制,用于分配和釋放內存。
四、 STL的特點
- 泛型編程
- 高效
- 模塊化
- 代碼復用