文章目錄
- 1.容器種類
- 2.演算法
- 3.迭代器種類
- 4.仿函數
- 5.適配器
- 6.配置器
STL就是所謂的標準模板庫.它主要提供了六大組件.
1.容器(container) 2.演算法(algorithm) 3.迭代器(iterator)
4.仿函數(functor) 5.適配器(adapter) 6.配置器(allocator)
我們知道資訊社會裡最重要的東東就是資訊,而資訊在電腦中就是以資料的形式表示.對使用者來說很重要的資料一般放資料庫裡去儲存和處理.
那我們寫代碼中用到的對我們開發人員來說非常重要的資料自然也應該很好的處理下.實際上我們就可以把STL簡單的理解在管理我們代碼中用到的資料.
程式中處理的資料都需要放到記憶體中去,所以得給資料分配記憶體,這主要由配置器(allocator)來管理.
然後嘛很多資料群組織到一起時會有不同的結構,你根據不同的需求選擇不同的資料結構.這就靠容器(container)了啊,每種容器對應一種資料結構.我們常把資料結構和演算法放一起說,
不同的資料結構適合用不同的演算法去處理它.STL中就有專門的一個組件演算法(algorithm).不過它是跟資料結構分開的,
為了使兩者結合起來有用到迭代器(iterator).可以簡單的把迭代器理解成一個泛型指標,也就是說它能夠指向容器中的任意一個元素.這樣就能通過迭代器去讀取修改容器中的元素.實際上普通的指標就可以看成一個特殊的迭代器.
由於實際應用需求千奇百怪,你提供的固定的演算法不一定適合,於是出現了仿函數(functor),就是可以在演算法的參數中傳函數進去,在演算法的實現中會調用到你提供的函數.不過仿函數不是個函數,而是封裝了函數的類.反正就功能上而言把它跟函數差不多.
我們用電源插頭的時候會發現有些插頭只能插進對應的插座.把一些常用的容器,演算法或仿函數當成一些固定的插座.那適配器(adapter)相當於把插座封裝下,再提供不同的插座介面.而新的介面是基於原來的功能的.實際上我們可以把這理解成一種代碼重用.物件導向中如果類之前有繼承關係,那子類繼承父類達到了重用的目的.而沒有繼承關係的可以通過把另外的類作為一個成員(has-a關係),通過組合的手段達到代碼重用.
1.容器種類
容器都是用類模板(class template)實現的
容器主要分為序列容器和關聯容器
序列容器: vector , list, deque
關聯容器: set, map, multiset, multimap, hash_set, hash_map, hash_multiset, hash_multimap
容器適配器: stack , queue, priority_queue
其中適配器容器就是基於序列容器的功能而實現的.
2.演算法
演算法都是用函數模板(function template)實現的.
比如有sort, search,copy,erase等常用演算法
3.迭代器種類
迭代器是用類模板(class template)實現的.重載了* -> ++ -- 等運算子.
迭代器分5種:
輸入迭代器, 輸出迭代器, 前面迭代器,雙向迭代器, 隨機訪問迭代器.
4.仿函數
仿函數是用類模板(class template)實現的.重載了operator().實際上一般的函數指標可以看作一個特殊仿函數
5.適配器
一種用來修飾容器、仿函數、迭代器介面的東西
6.配置器
配置器主要負責記憶體的分配,管理,釋放.
STL中預設的配置器是類allocator
六大組件關係是:
Container 通過Allocator獲得資料存放區空間,Algorithm 通過Iterator存取Container中的內容,
Functor可以協助Algoritm完成不同策略,Adapter可以修飾Container,Algorithm,Iterator.