STL

image

在C++標準中,STL被組織爲下面的13個頭文件:<algorithm>、<deque>、<functional>、<iterator>、<array>、<vector>、<list>、<forward_list>、<map>、<unordered_map>、<memory>、<numeric>、<queue>、<set>、<unordered_set>、<stack>和<utility>。算法

STL可分爲容器(containers)、迭代器(iterators)、空間配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函數(functors)六個部分。數組

容器

容器部分主要由頭文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>組成。對於經常使用的一些容器和容器適配器(能夠看做由其餘容器實現的容器),能夠經過下表總結一下它們和相應頭文件的對應關係。數據結構

  • 向量(vector)連續存儲單的元素<vector>
  • 列表(list)由節點組成的雙向鏈表,每一個結點包含着一個元素<list>
  • 雙隊列(deque)連續存儲的指向不一樣元素的指針所組成的數組<deque>
  • 集合(set)由節點組成的紅黑樹,每一個節點都包含一個元素,節點之間以某種做用於元素對的謂詞排列,沒有兩個不一樣的元素可以擁有相同的次序<set>
  • 多重集合(multiset)容許存在兩個次序相等的元素的集合<set>
  • 棧(stack)後進先出的值的排列<stack>
  • 隊列(queue)先進先出的值的排列<queue>
  • 優先隊列(priority_queue)元素的次序是由做用於所存儲的值對上的某種謂詞決定的一種隊列<queue>
  • 映射(map)由{鍵,值}對組成的集合,以某種做用於鍵對上的謂詞排列<map>
  • 多重映射(multimap)容許鍵對有相等的次序的映射<map>

在實際的開發過程當中,數據結構自己的重要性不會遜於操做於數據結構的算法的重要性,當程序中存在着對時間要求很高的部分時,數據結構的選擇就顯得更加劇要。函數

經典的數據結構數量有限,可是咱們經常重複着一些爲了實現向量、鏈表等結構而編寫的代碼,這些代碼都十分類似,只是爲了適應不一樣數據的變化而在細節上有所出入。STL容器就爲咱們提供了這樣的方便,它容許咱們重複利用已有的實現構造本身的特定類型下的數據結構,經過設置一些模板類,STL容器對最經常使用的數據結構提供了支持,這些模板的參數容許咱們指定容器中元素的數據類型,能夠將咱們許多重複而乏味的工做簡化3d

迭代器

 

算法

STL提供了大約100個實現算法的模版函數,好比算法for_each將爲指定序列中的每個元素調用指定的函數,stable_sort以你所指定的規則對序列進行穩定性排序等等。這樣一來,只要咱們熟悉了STL以後,許多代碼能夠被大大的化簡,只須要經過調用一兩個算法模板,就能夠完成所須要的功能並大大地提高效率。指針

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

相關文章
相關標籤/搜索