基本概念
STL: Standard Template Library,標準模板庫
定義: c++引入的一個標準類庫
特點:
1)數據結構和算法的 c++實現( 采用模板類和模板函數)
2)數據的存儲和算法的分離
3)高復用性, 高移植性
組件:
1)容器( Container)
2)算法( Algorithm)
3)迭代器( Iterator)
4)仿函數( Function object)
5)適配器( Adaptor)(略)
6)空間配制器( allocator)(略)
?
容器
一共有兩大類:分別是序列式容器和關聯式容器。
定義:序列式容器的應用
分類:
序列式容器:
1)棧(stack) 后進先出的值的排列
2)隊列(queue) 先進先出的值的排列
3)優先隊列(priority_queue) 元素的次序是由作用于所存儲的值對上的某種謂詞決定的的一種隊列
關聯式容器:
定義:元素位置取決于特定的排序準則,和插入順序無關。
分類:
1)集合(set/multiset)
2)內部的元素依據其值自動排序, Set 內的相同數值的元素只能出現一次,Multisets 內可包含多個數值相同的元素,內部由二叉樹實現,便于查找
1)映射(map/multimap)
2)元素是成對的鍵值/實值,內部的元素依據其值自動排序, Map 內的相同數值的元素只能出現一次,Multimaps 內可包含多個數值相同的元素, 內部由二叉樹實現,便于查找(實際上是紅黑樹的二叉樹的變種)
算法
定義:如果說容器是數據的存儲,那么算法就是操作, 只不過 stl 里面的算法都是模板函
數, 總共有 100 多個。比如算法 for_each 將為指定序列中的每一個元素調用指定的函數,
stable_sort 以 你所指定的規則對序列進行穩定性排序等等。這樣一來,只要熟悉了 STL 之后,
許多代碼可以被大大的化簡,只需要通過調用一兩個算法模板,就可以完成所需要 的功能
并大大地提升效率。
算法部分主要由頭文件<algorithm>, <numeric>和<functional>組 成。 <algorithm>是所
有 STL 頭文件中最大的一個(盡管它很好理解),它是由一大堆模版函數組成的,可以認為
每個函數在很大程度上 都是獨立的,其中常用到的功能范圍涉及到比較、交換、查找、遍
歷操作、復制、修改、移除、反轉、排序、合并等等。 <numeric>體積很 小,只包括幾個在
序列上面進行簡單數學運算的模板函數,包括加法和乘法在序列上的一些操作。 <functional>
中則定義了一些模板類, 用以聲明函數對象。
?
迭代器
定義: 迭代器在 STL 中用來將算法和容器聯系起來,起著一種黏和劑的作用。幾乎 STL
提供的所有算法都是通 過迭代器存取元素序列進行工作的,每一個容器都定義了其本身所
專有的迭代器,用以存取容器中的元素。
迭代器部分主要由頭文件<utility>,<iterator>和<memory>組 成。 <utility>是一個很小的
頭文件,它包括了貫穿使用在 STL 中的幾個模板的聲明, <iterator>中提供了迭代器 使用的
許多方法,而對于<memory>的描述則十分的困難,它以不同尋常的方式為容器中的元素分
配存儲空間,同時也為某些算法執行期間產生 的臨時對象提供機制,<memory>中的主要部
分是模板類 allocator,它負責產生所有容器中的默認分配器。
?
仿函數
定義: 仿函數本身不是函數, 而是一個類對象, 因為類中重載了函數運算符(), 即
operator().所以類對象具有了類似函數的功能。 可以使模板重加的靈活。 后來的
lambada 的它升級版本。
?
圖標總結:
、
共同特點
1)支持泛型
2)保存副本
3)內存管理
?