C++STL源碼分析(三):迭代器和iterator Teaits

1.Iterator需要遵循的原則

iterators 是算法和容器的橋樑,迭代器將容器中的一段範圍告訴算法

Iterator由於算法的執行需要,要具備5個associated type:

  1. iterator_traits<_Iter>::iteraptor_category:迭代器的類型 ,有的只能++ 、有的能-- 、有的能跳躍前進
  2. value_type 指向元素的類型
  3. difference_type:兩個iterator間的距離用什麼 type來表示
  4. reference: 未被使用
  5. pointer: 未被使用

迭代器本身必須定義出來上述5種類型,以便回答算法提問

相關源碼截圖:

疑問:如果使用的iterator不是一個class,而是native pointer呢? 原生的指針也是一種退化的迭代器,可是它沒有定義上面的5個associate type呀?

2.Iterator Traits

爲了解決上面的疑惑,必須有一個工具來區分算法收到的iterator是class表現得iterator還是非class形式得iterator

這個機器就是Ierator Traits(一箇中間層)

解決計算機問題得尚方寶劍:加一箇中間層!!

  • 如果是class iterator的話value_type直接通過iterator_traits間接獲得就行了
  • 如果是pointer to T則利用偏特化處理
  • 如果是Pointer to const T則利用偏特化處理

各種各樣得Traits

  • type traits
  • iterator traits
  • char traits
  • allocator traits
  • pointer traits
  • array traits

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章