1. 程式人生 > >C++ STL簡單介紹

C++ STL簡單介紹

STL(Standard Template Library,標準模板庫)是C++對泛型程式設計思想的實現,最早是惠普實驗室開發的。
在被引入C++之前該技術就已經存在了非常長的一段時間。後來STL成為ANSI/ISO C++標準的一部分。各個
C++廠商也有各自對應的模板庫,這些庫效率可能非常高,但可移植性不一定好。
  STL廣義上分為三類:algorithm(演算法)、container(容器)和iterator(迭代器),差點兒全部的程式碼都採
用了模板類和模板函式的方式,這相比於傳統的由函式和類組成的庫來說提供了更好的程式碼重用機會。
  在C++標準中,STL被組織為以下的13個頭檔案:<algorithm>、<deque>、<functional>、<iterator>、<vector>、
<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack> 和<utility>。
1) 演算法(algorithm)
  STL提供了大約100個實現演算法的模版函式,演算法部分主要由標頭檔案<algorithm>,<numeric> 和<functional>組成。
  <algorithm>是全部STL標頭檔案裡最大的一個,它是由一大堆模板函式組成的,當中經常使用到的功能範圍涉及到比較、
交換、查詢、遍歷操作、複製、改動、移除、反轉、排序、合併等等。
  <numeric>體積非常小,僅僅包含一些簡單數學運算的模板函式。
  <functional>中則定義了一些模板類,用以宣告函式物件。
2) 容器(container)(又稱集合collection)
  在實際的開發過程中,資料結構本身的重要性不會遜於操作於資料結構的演算法的重要性,當程式中存在著對時間要
求非常高的部分時,資料結構的選擇就顯得更加重要。
  通過設定一些模版類,STL容器對最經常使用的資料結構提供了支援,這些模板的引數同意指定容器中元素的資料類
型,能夠將很多反覆而乏味的工作簡化。
例如以下表:
資料結構



實現標頭檔案

向量(vector)順序性容器<vector>

列表(list)順序性容器<list>

雙佇列(deque)順序性容器<deque>

集合(set)關聯容器 <set>

多重集合(multiset)關聯容器<set>

棧(stack)容器介面卡<stack>

佇列(queue)容器介面卡<queue>

優先佇列(priority_queue)容器介面卡<queue>

對映(map)關聯容器 <map>

多重對映(multimap)關聯容器<map>


3)迭代器(iterator)
  迭代器是一種同意程式猿檢查容器內元素,並實現元素遍歷的資料型別。C++標準庫為每一種標準容器定義了一種迭代器型別。迭代器型別提供了比下標操作更一般化的方法:全部的標準庫容器都定義了對應的迭代器型別,而僅僅有少數的容器(比方陣列)支援下標操作。由於迭代器對全部的容器都適用,現代C++程式更傾向於使用迭代器而不是下標操作訪問容器元素。
  迭代器從作用上來說是STL最主要的部分,迭代器在STL中用來將演算法和容器聯絡起來,起著一種黏和劑的作用。差點兒STL提供的全部演算法都是通過迭代器存取元素序列進行工作的,每個容器都定義了其本身所專有的迭代器,用以存取容器中的元素。
  迭代器部分主要由標頭檔案<utility>,<iterator> 和<memory>組成。<utility>是一個非常小的標頭檔案,它包含了貫穿使用在STL中的幾個模板的宣告,<iterator>中提供了迭代器使用的很多方法, <memory>為容器中的元素分配儲存空間,同一時候也為某些演算法執行期間產生的暫時物件提供機制,<memory>中的主要部分是模板類allocator,它負責產生全部容器中的預設分配器。