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