STL 容器,算法,迭代器 總結

一、容器 
作爲STL的最主要組成部分--容器,分爲向量(vector),雙端隊列(deque),表(list),隊列(queue),堆棧(stack),集合(set),多重集合(multiset),映射(map),多重映射(multimap)。

容器 
特性
所在頭文件

向量vector
可以用常數時間訪問和修改任意元素,在序列尾部進行插入和刪除時,具有常數時間複雜度,對任意項的插入和刪除就有的時間複雜度與到末尾的距離成正比,尤其對向量頭的添加和刪除的代價是驚人的高的
<vector>

雙端隊列deque
基本上與向量相同,唯一的不同是,其在序列頭部插入和刪除操作也具有常量時間複雜度
<deque>

表list
對任意元素的訪問與對兩端的距離成正比,但對某個位置上插入和刪除一個項的花費爲常數時間。
<list>

隊列queue
插入只可以在尾部進行,刪除、檢索和修改只允許從頭部進行。按照先進先出的原則。
<queue>

堆棧stack
堆棧是項的有限序列,並滿足序列中被刪除、檢索和修改的項只能是最近插入序列的項。即按照後進先出的原則
<stack>

集合set
由節點組成的紅黑樹,每個節點都包含着一個元素,節點之間以某種作用於元素對的謂詞排列,沒有兩個不同的元素能夠擁有相同的次序,具有快速查找的功能。但是它是以犧牲插入車刪除操作的效率爲代價的
<set>

多重集合multiset
和集合基本相同,但可以支持重複元素具有快速查找能力
<set>

映射map
由{鍵,值}對組成的集合,以某種作用於鍵對上的謂詞排列。具有快速查找能力
<map>

多重集合multimap
比起映射,一個鍵可以對應多了值。具有快速查找能力
<map>


考慮到不同的實際需要,更主要的是效率的需要,我們可以選擇不同的容器來實現我們的程序,以此達到我們提高性能的目的。這也是用好STL的一個難點,但這也是關鍵。

二、算法
算法部分主要由頭文件<algorithm>,<numeric>和<functional>組成。<algorithm>是所有STL頭文件中最大的一個,它是由一大堆模版函數組成的,可以認爲每個函數在很大程度上都是獨立的,其中常用到的功能範圍涉及到比較、交換、查找、遍歷操作、複製、修改、移除、反轉、排序、合併等等。<numeric>體積很小,只包括幾個在序列上面進行簡單數學運算的模板函數,包括加法和乘法在序列上的一些操作。<functional>中則定義了一些模板類,用以聲明函數對象。

STL的算法也是非常優秀的,它們大部分都是類屬的,基本上都用到了C++的模板來實現,這樣,很多相似的函數就不用自己寫了,只要用函數模板就OK了。

我們使用算法的時候,要針對不同的容器,比如:對集合的查找,最好不要用通用函數find(),它對集合使用的時候,性能非常的差,最好用集合自帶的find()函數,它針對了集合進行了優化,性能非常的高。

三、迭代器
它的具體實現在<itertator> 中,我們完全可以不管迭代器類是怎麼實現的,大多數的時候,把它理解爲指針是沒有問題的(指針是迭代器的一個特例,它也屬於迭代器),但是,決不能完全這麼做。

迭代器功能(Abilities Of Iterator Gategories)

輸入迭代器

Input iterator
向前讀

Reads forward
istream

輸出迭代器

Output iterator
向前寫

Writes forward
ostream,inserter

前向迭代器

Forward iterator
向前讀寫

Read and Writes forward

雙向迭代器

Bidirectional iterator
向前向後讀寫

Read and Writes forward and

backward
list,set,multiset,map,mul

timap

隨機迭代器

Random access iterator
隨機讀寫

Read and Write with random

access

vector,deque,array,string


From:http://www.game798.com/html/2007-04/3343.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章