STL学习系列一:STL(标准模板库)理论基础
STL(Standard Template Library,標準模板庫)是惠普實驗室開發的一系列軟件的統稱。現然主要出現在C++中,但在被引入C++之前該技術就已經存在了很長的一段時間。
? ? STL的從廣義上講分為三類:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通過迭代器可以進行無縫地連接。幾乎所有的代碼都采 用了模板類和模板函數的方式,這相比于傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。在C++標準中,STL被組織為下面的13個頭文 件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack> 和<utility>。
使用STL的好處
- STL是C++的一部分,因此你不用額外安裝什么,它被內建在你的編譯器之內。
- STL的一個重要特點是數據結構和算法的分離,使得STL變得非常通用。
- 程序員可以不用思考STL具體的實現過程,只要能夠熟練使用STL就OK了,我們可以把精力放在程序開發的別的方面。
- STL具有高可重用性,高性能,高移植性,跨平臺的優點。
STL詳細的說六大組件
- –?? 容器(Container)
- –?? 算法(Algorithm)
- –?? 迭代器(Iterator)
- –?? 仿函數(Function object)
- –?? 適配器(Adaptor)
- –?? 空間配制器(allocator)
容器
容器的概念:是數據結構的實現,用來管理一組元素 。
容器的分類:
-
- 序列式容器(Sequence containers)?每個元素都有固定位置--取決于插入時機和地點,和元素值無關。vector、deque、list?
- 關聯式容器(Associated containers)元素位置取決于特定的排序準則,和插入順序無關?set、multiset、map、multimap
| 數據結構 | 描述 | 實現頭文件 |
| 向量(vector) | 連續存儲的元素 | <vector> |
| 列表(list) | 由節點組成的雙向鏈表,每個結點包含著一個元素 | <list> |
| 雙隊列(deque) | 連續存儲的指向不同元素的指針所組成的數組 | <deque> |
| 集合(set) | 由節點組成的紅黑樹,每個節點都包含著一個元素,節點之間以某種作用于元素對的謂詞排列,沒有兩個不同的元素能夠擁有相同的次序 | ? <set> |
| 多重集合(multiset) | 允許存在兩個次序相等的元素的集合 | ?<set> |
| 棧(stack) | 后進先出的值的排列 | <stack> |
| 隊列(queue) | 先進先出的執的排列 | <queue> |
| 優先隊列(priority_queue) | 元素的次序是由作用于所存儲的值對上的某種謂詞決定的的一種隊列 | <queue> |
| 映射(map) | 由{鍵,值}對組成的集合,以某種作用于鍵對上的謂詞排列 | <map> |
| 多重映射(multimap) | 允許鍵對有相等的次序的映射 | <map> |
迭代器
? ? ?軟件設計有一個基本原則,所有的問題都可以通過引進一個間接層來簡化, 這種簡化在STL中就是用迭代器來完成的。概括來說,迭代器在STL中用來將算法和容器聯系起來,起著一種黏和劑的作用。幾乎STL提供的所有算法都是通 過迭代器存取元素序列進行工作的,每一個容器都定義了其本身所專有的迭代器,用以存取容器中的元素。迭代器部分主要由頭文件<utility>,<iterator>和<memory>組成。
算法
C++通過模板的機制允許推遲對某些類型的選擇,直到真正想使用模板或者說對模板進行特化的時候,STL就利用了這一點提供了相當多的有用算法。
算法部分主要由頭文件<algorithm>,<numeric>和<functional>組成。<algorithm>是所有STL頭文件中最大的一個(盡管它很好理解),它是由一大堆模版函數組成的,可以認為每個函數在很大程度上 都是獨立的,其中常用到的功能范圍涉及到比較、交換、查找、遍歷操作、復制、修改、移除、反轉、排序、合并等等。<numeric>體積很小,只包括幾個在序列上面進行簡單數學運算的模板函數,包括加法和乘法在序列上的一些操作。<functional>中則定義了一些模板類,用以聲明函數對象。
仿函數
重載函數調用操作符的類,其對象常稱為函數對象(function object),即它們是行為類似函數的對象。一個類對象,表現出一個函數的特征,就是通過“對象名+(參數列表)”的方式使用一個類對象,如果沒有上下文,完全可以把它看作一個函數對待。
函數適配器
用于特化和擴展一元和二元函數對象。
函數適配器可以分為以下四類:
- 綁定適配器
- 組合適配器
- 指針函數適配器
- 成員函數適配器
空間適配器
其中主要工作包括兩部分:
- 對象的創建與銷毀???
- 內存的獲取與釋放
轉載于:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_stl_001.html
總結
以上是生活随笔為你收集整理的STL学习系列一:STL(标准模板库)理论基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP 数字转化为自定义长度的字符串[前
- 下一篇: LB-createLB整理架构图-loa