STL原始碼剖析學習三 迭代器與traits

2022-08-18 16:51:10 字數 1411 閱讀 6009

stl的中心思想在於:將資料容器與演算法分開,彼此獨立設計,然後用膠合劑將他們撮合在一起。

迭代器最重要的操作就是對operator*和operator->進行過載

為了不暴露容器的內部實現細節,每一種容器都有專屬的迭代器,這樣就可以把所有的實現細節封裝起來不被使用者看到。

偏特化:如果模板類擁有乙個以上的模版引數,可以針對其中幾個(不是全部)的模版引數進行特化工作。

換句話說,就是針對模版引數更進一步的條件限制所設計出來的乙個特化版本。

traits技術

用traits專門提取迭代器的特性,增加了乙個間隔層,就可以針對原生指標,常指標等設計不同的偏特化版本。

template

struct

iterator_traits

;template

typename iterator_traits

::valu_type

func(i ite)

template

struct iterator_traits

traits就像特性萃取機,可以萃取不同的迭代器特性,最常用的迭代器的型別

template

struct

iterator_traits

value_type迭代器所指向的物件的型別

difference_type兩個迭代器之間的距離

reference_type函式要傳回左值,必須用引用傳遞的方式進行

point_type傳回乙個pointer指向迭代器所指之物

iterator_category迭代器的分類:

//**中只用作標記作用的迭代器型別,不需要任何成員

struct input_iterator_tag唯讀,不允許外界的改變

struct output_iterator_tag只寫

struct forward_iterator_tag:public input_iterator_tag允許寫入型演算法的操作,只能向前移動

struct bidirectional_iterator_tag:public forward_iterator_tag可雙向移動

struct random_access_iterator_tag:public bidirectional_iterator_tag隨機訪問,提供所有的指標算數能力

stl定義的iterator class,每個新設計的迭代器都繼承自他,保證符合規範

template category, 

class

t,

class distance =ptrdiff_t,

class pointer = t*;

class reference = t&>

struct

iterator;

STL原始碼剖析 迭代器

一 迭代器 迭代器五種相應型別 1.valuetype,是指迭代器所指物件的型別。2.differencetype,用來表示迭代器之間的距離,可以用來表示乙個容器的最大容量。例如stl中的count 函式,其返回值就是difference type。3.referencetype,在c 中如果要傳回...

STL原始碼剖析 迭代器

迭代器是一種模式,實現了通過乙個統一介面訪問stl容器的方法。stl作為橋梁鏈結了stl演算法與容器。例如,我們可以通過sort a.begin a.end 完成一次利用演算法對vector型別容器a的排序。標準stl中,迭代器在容器內部,每種容器都有自己專屬的迭代器。這樣做的原因是,如果要建立迭代...

stl原始碼剖析01 迭代器

下面介紹乙個容器 演算法 迭代器在一起使用的案例 templateinputiterator find inputiterator first,inputiterator last,const t value include include include include include using...