久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

STL容器詳解

 guitarhua 2012-07-05

STL容器詳解




3.1. STL容器

(1)序列式容器(Sequence containers),,每個(gè)元素都有固定位置--取決于插入時(shí)機(jī)和地點(diǎn),和元素值無關(guān),,vector,、deque、list,;

Vectors:將元素置于一個(gè)動(dòng)態(tài)數(shù)組中加以管理,,可以隨機(jī)存取元素(用索引直接存取),,數(shù)組尾部添加或移除元素非??焖佟5窃谥胁炕蝾^部安插元素比較費(fèi)時(shí),;

Deques:是“double-ended queue”的縮寫,,可以隨機(jī)存取元素(用索引直接存取),,數(shù)組頭部和尾部添加或移除元素都非??焖佟5窃谥胁炕蝾^部安插元素比較費(fèi)時(shí),;

Lists:雙向鏈表,,不提供隨機(jī)存取(按順序走到需存取的元素,,O(n)),,在任何位置上執(zhí)行插入或刪除動(dòng)作都非常迅速,內(nèi)部只需調(diào)整一下指針,;

(2)關(guān)聯(lián)式容器(Associated containers),,元素位置取決于特定的排序準(zhǔn)則,和插入順序無關(guān),,set,、multiset、map,、multimap,;

Sets/Multisets:內(nèi)部的元素依據(jù)其值自動(dòng)排序,Set內(nèi)的相同數(shù)值的元素只能出現(xiàn)一次,,Multisets內(nèi)可包含多個(gè)數(shù)值相同的元素,,內(nèi)部由二叉樹實(shí)現(xiàn),便于查找,;

Maps/Multimaps:Map的元素是成對(duì)的鍵值/實(shí)值,,內(nèi)部的元素依據(jù)其值自動(dòng)排序,,Map內(nèi)的相同數(shù)值的元素只能出現(xiàn)一次,Multimaps內(nèi)可包含多個(gè)數(shù)值相同的元素,,內(nèi)部由二叉樹實(shí)現(xiàn),,便于查找;

容器的比較:


Vector Deque List Set MultiSet Map MultiMap
內(nèi)部結(jié)構(gòu) dynamic array array of arrays double linked list binary tree binary tree binary tree binary tree
隨機(jī)存取 Yes Yes No No No Yes(key) No
搜索速度 很慢
快速插入移除 尾部 首尾 任何位置 -- -- -- --

 

迭代器的作用:能夠讓迭代器與算法不干擾的相互發(fā)展,,最后又能無間隙的粘合起來,,重載了*,++,,==,,!=,,=運(yùn)算符,。用以操作復(fù)雜的數(shù)據(jù)結(jié)構(gòu),容器提供迭代器,,算法使用迭代器,;

3.2 STL迭代器

迭代器作用:

(1)能夠讓迭代器與算法不干擾的相互發(fā)展,最后又能無間隙的粘合起來,;

(2)重載了*,++,,==,,!=,,=運(yùn)算符,。用以操作復(fù)雜的數(shù)據(jù)結(jié)構(gòu);

(3)容器提供迭代器,,算法使用迭代器,;

簡(jiǎn)單例子:

image

迭代器的分類:

Input Iterator, Output Iterator, Forward Iterator, Bidirectional Iterator, Random access Iterator等;

不同容器提供自己的迭代器,,所以不同迭代器具有不同的能力,;

不同的算法需要不同的迭代器的能力;相同的算法需要根據(jù)迭代器的能力不同而做相應(yīng)的優(yōu)化,;

image

3.3 STL算法

STL算法部分主要由頭文件<algorithm>, <numeric>, <functional>組成,;要使用STL中的算法函數(shù)必須包含頭文件<algorithm>,對(duì)于數(shù)值算法須包含<numeric>,,<functional>中則定義了一些模板類,,用來聲明函數(shù)對(duì)象;

STL中算法大致分為四類:

非可變序列算法:指不直接修改其所操作的容器內(nèi)容的算法,。

可變序列算法:指可以修改它們所操作的容器內(nèi)容的算法,。

排序算法:包括對(duì)序列進(jìn)行排序和合并的算法,、搜索算法以及有序序列上的集合操作。

數(shù)值算法:對(duì)容器內(nèi)容進(jìn)行數(shù)值計(jì)算,。

查找算法(13個(gè)):判斷容器中是否包含某個(gè)值,;

adjacent_find:在iterator對(duì)標(biāo)識(shí)元素范圍內(nèi),查找一對(duì)相鄰重復(fù)元素,,找到則返回指向這對(duì)元素的第一個(gè)元素的Forward Iterator,;否則返回last;

binary_search:在有序序列中查找value,,找到返回true,。重載的版本實(shí)用指定的比較函數(shù)對(duì)象或函數(shù)指針來判斷相等;

count:利用等于操作符,,把標(biāo)志范圍內(nèi)的元素與輸入值比較,,返回相等元素個(gè)數(shù);

count_if:利用輸入的操作符,,對(duì)標(biāo)志范圍內(nèi)的元素進(jìn)行操作,,返回結(jié)果為true的個(gè)數(shù);

equal_range:功能類似equal,,返回一對(duì)iterator,,第一個(gè)表示lower_bound,第二個(gè)表示upper_bound,;

其他:find,,find_end,find_first_of,,find_if,,lower_bound,upper_bound,,search,,search_n;

排序和通用算法(14個(gè)):提供元素排序策略,;

inplace_merge:合并兩個(gè)有序序列,,結(jié)果序列覆蓋兩端范圍。重載版本使用輸入的操作進(jìn)行排序,;

merge:合并兩個(gè)有序序列,,存放到另一個(gè)序列。重載版本使用自定義的比較,;

nth_element:將范圍內(nèi)的序列重新排序,,使所有小于第n個(gè)元素的元素都出現(xiàn)在它前面,而大于它的都出現(xiàn)在后面,。重載版本使用自定義的比較操作,;

partial_sort:對(duì)序列做部分排序,,被排序元素個(gè)數(shù)正好可以被放到范圍內(nèi)。重載版本使用自定義的比較操作,;

partial_sort_copy:與partial_sort類似,,不過將經(jīng)過排序的序列復(fù)制到另一個(gè)容器;

其他:partition,,random_shuffle,,reverse,reverse_copy,,rotate,, rotate_copy,sort,,stable_sort,,stable_partition;

刪除和替換算法(15個(gè)),;

排列組合算法(2個(gè)):提供計(jì)算給定集合按一定順序的所有可能排列組合,;

算術(shù)算法(4個(gè));

生成和異變算法(6個(gè)),;

關(guān)系算法(8個(gè)),;

集合算法(4個(gè));

堆算法(4個(gè)),;

4. STL使用示例

待續(xù)…

5. 參考文檔

(1)C++ STL 快速入門 http://morningspace./resource/stlintro/stlintro.html

(2)三十分鐘掌握STL http://net.pku.edu.cn/~yhf/UsingSTL.htm

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多