STL = Standard Template Library,標準模板庫,惠普實驗室開發的一系列軟件的統稱。
它是由Alexander Stepanov、Meng Lee和David R Musser在惠普實驗室工作時所開發出來的。STL是一些"容器"的集合,這些"容器"有list,vector,set,map等,STL也是算法和其他一些組件的集合。STL的目的是標準化組件,這樣就不用重新開發,可以使用現成的組件。STL現在是C++的一部分,因此不用額外安裝什麼。
STL可分爲容器(containers)、迭代器(iterators)、空間配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函數(functors)六個部分。
容器部分主要由頭文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>組成。對於常用的一些容器和容器適配器(可以看作由其它容器實現的容器),可以通過下表總結一下它們和相應頭文件的對應關係。
序列式容器
向量(vector) 連續存儲的元素<vector>
鏈表(list) 由節點組成的雙向鏈表,每個結點包含着一個元素<list>
雙端隊列(deque) 連續存儲的指向不同元素的指針所組成的數組<deque>
容器適配器
棧(stack) 後進先出的值的排列 <stack>
隊列(queue) 先進先出的值的排列 <queue>
優先隊列(priority_queue) 元素的次序是由作用於所存儲的值對上的某種謂詞決定的的一種隊列 <queue>
關聯式容器
集合(set) 由節點組成的紅黑樹,每個節點都包含着一個元素,節點之間以某種作用於元素對的謂詞排列,沒有兩個不同的元素能夠擁有相同的次序 <set>
多重集合(multiset) 允許存在兩個次序相等的元素的集合 <set>
映射(map) 由{鍵,值}對組成的集合,以某種作用於鍵對上的謂詞排列 <map>
多重映射(multimap) 允許鍵對有相等的次序的映射 <map>
迭代器部分主要由頭文件<utility>,<iterator>和<memory>組成。<utility>是一個很小的頭文件,它包括了貫穿使用在STL中的幾個模板的聲明,<iterator>中提供了迭代器使用的許多方法,而對於<memory>的描述則十分的困難,它以不同尋常的方式爲容器中的元素分配存儲空間,同時也爲某些算法執行期間產生的臨時對象提供機制,<memory>中的主要部分是模板類allocator,它負責產生所有容器中的默認分配器。
算法部分主要由頭文件<algorithm>,<numeric>和<functional>組成。<algorithm>是所有STL頭文件中最大的一個(儘管它很好理解),它是由一大堆模版函數組成的,可以認爲每個函數在很大程度上都是獨立的,其中常用到的功能範圍涉及到比較、交換、查找、遍歷操作、複製、修改、移除、反轉、排序、合併等等。<numeric>體積很小,只包括幾個在序列上面進行簡單數學運算的模板函數,包括加法和乘法在序列上的一些操作。<functional>中則定義了一些模板類,用以聲明函數對象。