STL(Standard Template Library,標(biāo)準(zhǔn)模板庫)是C++對泛型編程思想的實現(xiàn),,最早是惠普實驗室開發(fā)的,。在被引入C++之前該技術(shù)就已經(jīng)存在了很長的一段時間。后來STL成為ANSI/ISO C++標(biāo)準(zhǔn)的一部分,。各個C++廠商也有各自相應(yīng)的模板庫,,這些庫效率可能很高,但可移植性不一定好,。
在C++標(biāo)準(zhǔn)中,,STL被組織為下面的17個頭文件:<algorithm>、<deque>,、<functional>,、<iterator>,、<array>,、<vector>,、<list>、<forward_list>,、<map>,、<unordered_map>、<memory>,、<numeric>,、<queue>、<set>,、<unordered_set>,、<stack>和<utility>。
常用的一般有:algorithm(算法),、container(容器)和iterator(迭代器),。幾乎所有的代碼都采用了模板類和模板函數(shù)的方式,這相比于傳統(tǒng)的由函數(shù)和類組成的庫來說提供了更好的代碼重用機(jī)會,。
1) 算法(algorithm) STL提供了大約100個實現(xiàn)算法的模版函數(shù),,算法部分主要由頭文件<algorithm>,<numeric> 和<functional>組成,。 <algorithm>是所有STL頭文件中最大的一個,,它是由一大堆模板函數(shù)組成的,其中常用到的功能范圍涉及到比較,、交換,、查找、遍歷操作,、復(fù)制,、修改、移除,、反轉(zhuǎn),、排序、合并等等,。 <numeric>體積很小,,只包括一些簡單數(shù)學(xué)運(yùn)算的模板函數(shù)。 <functional>中則定義了一些模板類,,用以聲明函數(shù)對象,。
2) 容器(container)(又稱集合collection) 在實際的開發(fā)過程中,數(shù)據(jù)結(jié)構(gòu)本身的重要性不會遜于操作于數(shù)據(jù)結(jié)構(gòu)的算法的重要性,,當(dāng)程序中存在著對時間要求很高的部分時,,數(shù)據(jù)結(jié)構(gòu)的選擇就顯得更加重要。 通過設(shè)置一些模版類,,STL容器對最常用的數(shù)據(jù)結(jié)構(gòu)提供了支持,,這些模板的參數(shù)允許指定容器中元素的數(shù)據(jù)類型,,可以將許多重復(fù)而乏味的工作簡化。 如下表:
數(shù)據(jù)結(jié)構(gòu)
|
|
實現(xiàn)頭文件
|
向量(vector)
|
順序性容器
|
<vector>
|
列表(list)
|
順序性容器
|
<list>
|
雙隊列(deque)
|
順序性容器
|
<deque>
|
集合(set)
|
關(guān)聯(lián)容器
|
<set>
|
多重集合(multiset)
|
關(guān)聯(lián)容器
|
<set>
|
棧(stack)
|
容器適配器
|
<stack>
|
隊列(queue)
|
容器適配器
|
<queue>
|
優(yōu)先隊列(priority_queue)
|
容器適配器
|
<queue>
|
映射(map)
|
關(guān)聯(lián)容器
|
<map>
|
多重映射(multimap)
|
關(guān)聯(lián)容器
|
<map>
|
3) 迭代器(iterator) 迭代器是一種允許程序員檢查容器內(nèi)元素,,并實現(xiàn)元素遍歷的數(shù)據(jù)類型,。C++標(biāo)準(zhǔn)庫為每一種標(biāo)準(zhǔn)容器定義了一種迭代器類型。迭代器類型提供了比下標(biāo)操作更一般化的方法:所有的標(biāo)準(zhǔn)庫容器都定義了相應(yīng)的迭代器類型,,而只有少數(shù)的容器(比如數(shù)組)支持下標(biāo)操作,。因為迭代器對所有的容器都適用,現(xiàn)代C++程序更傾向于使用迭代器而不是下標(biāo)操作訪問容器元素,。 迭代器從作用上來說是STL最基本的部分,,迭代器在STL中用來將算法和容器聯(lián)系起來,起著一種黏和劑的作用,。幾乎STL提供的所有算法都是通過迭代器存取元素序列進(jìn)行工作的,,每一個容器都定義了其本身所專有的迭代器,用以存取容器中的元素,。 迭代器部分主要由頭文件<utility>,<iterator> 和<memory>組成,。<utility>是一個很小的頭文件,它包括了貫穿使用在STL中的幾個模板的聲明,,<iterator>中提供了迭代器使用的許多方法,, <memory>為容器中的元素分配存儲空間,同時也為某些算法執(zhí)行期間產(chǎn)生的臨時對象提供機(jī)制,<memory>中的主要部分是模板類allocator,,它負(fù)責(zé)產(chǎn)生所有容器中的默認(rèn)分配器,。
個人理解:迭代器其實很好理解,它就好比C語言中的指針和數(shù)組下標(biāo)一樣,,指針和數(shù)組下標(biāo)可以用來遍歷數(shù)組中的元素,,而迭代器可以遍歷容器中的元素。
|