STL 原始碼分析之萃取器

2021-08-15 00:09:06 字數 1110 閱讀 7316

在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內...