stl的中心思想在於:將資料容器與演算法分開,彼此獨立設計,然後用膠合劑將他們撮合在一起。
迭代器最重要的操作就是對operator*和operator->進行過載
為了不暴露容器的內部實現細節,每一種容器都有專屬的迭代器,這樣就可以把所有的實現細節封裝起來不被使用者看到。
偏特化:如果模板類擁有乙個以上的模版引數,可以針對其中幾個(不是全部)的模版引數進行特化工作。
換句話說,就是針對模版引數更進一步的條件限制所設計出來的乙個特化版本。
traits技術
用traits專門提取迭代器的特性,增加了乙個間隔層,就可以針對原生指標,常指標等設計不同的偏特化版本。
templatestruct
iterator_traits
;template
typename iterator_traits
::valu_type
func(i ite)
template
struct iterator_traits
traits就像特性萃取機,可以萃取不同的迭代器特性,最常用的迭代器的型別
templatestruct
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...