在stl中迭代器控制演算法,演算法操作容器。但是,泛型程式設計中演算法並不知道迭代器傳遞給他的是什麼樣的型別,所以在迭代器和演算法之間需要乙個東西來分配型別。這東西就是萃取器。這是一種程式設計的技法。下面上圖後直接上模擬的萃取器**。並且說明原理。
下面上模擬**。都備註好了。
#includeusing namespace std;
//先來寫兩個結構體。
struct a{};
struct b{};
//假設傳入乙個不知道是啥的型別
templatestruct unknown_class
;//正常版本的萃取器
templatestruct unknown_class_traits
;//指標特化
templatestruct unknown_class_traits;
//const指標特化版本
template struct unknown_class_traits;
//萃取分配器
template inline typename unknown_class_traits::return_type
return_type()
;// func作為共有介面
template inline typename unknown_class_traits::return_type
func(unknow_type u)
//func的三個過載版本。為了區分起見,過載的版本叫_func();
template inline typename unknown_class_traits::return_type
_func(unknow_type,a)
template inline typename unknown_class_traits::return_type
_func(unknow_type,b)
template t
_func(unknow_type, t)
int main()
STL原始碼分析之Vector
地球人都知道vector的查詢效率很高,插入和刪除的效率低下,容器會隨著元素的不斷增加自動增長,最近在看了stl原始碼之後,發現確實是這樣,下面是vector一些關鍵的函式.從這些函式可以看出插入和刪除的過程,以及容器自動增長的方式.兩個通過下標獲取元素的函式.reference operator ...
STL之pair原始碼分析
直接進入主題,請看pair的原始碼 namespace std 預設建構函式,用型別的預設建構函式初始化兩個資料成員 pair const t1 a,const t2 b first a second b 建構函式,用a初始化first,用b初始化second template 模板函式,拷貝建構函...
STL原始碼分析之vector
vector是序列容器的一種,分配的是一段連續的空間,所以它支援下標訪問,同時它另一特點是可以自行擴充空間,每次是以原大小兩倍來擴充,是另外配置的一塊空間,將原內容拷貝過去,所以當對vector的空間進行重新配置時,指向原vector的迭代器就失效了。下面分析它具體是怎麼實現的和熟悉下vector內...