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),,便于查找; 容器的比較:
迭代器的作用:能夠讓迭代器與算法不干擾的相互發(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)單例子: 迭代器的分類: Input Iterator, Output Iterator, Forward Iterator, Bidirectional Iterator, Random access Iterator等; 不同容器提供自己的迭代器,,所以不同迭代器具有不同的能力,; 不同的算法需要不同的迭代器的能力;相同的算法需要根據(jù)迭代器的能力不同而做相應(yīng)的優(yōu)化,; 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 |
|