1. 程式人生 > >STL 標準模板庫

STL 標準模板庫

body nal search 空間配置器 產生 content 結點 文件 適配

  STL(Standard Template Library,標準模板庫),

組成:

  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>

叠代器 在STL中很常見,用於聯系算法和容器,幾乎STL提供的所有算法都是通過叠代器存取元素序列進行工作的,每一個容器都定義了其本身所專有的叠代器,用以存取容器中的元素。

叠代器部分主要由頭文件<utility>,<iterator>和<memory>組成。<utility>是一個很小的頭文件,它包括了貫穿使用在STL中的幾個模板的聲明,<iterator>中提供了叠代器使用的許多方法,而對於<memory>的描述則十分的困難,它以不同尋常的方式為容器中的元素分配存儲空間,同時也為某些算法執行期間產生的臨時對象提供機制,<memory>中的主要部分是模板類allocator,它負責產生所有容器中的默認分配器。

算法

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

STL 標準模板庫