1.Iterator需要遵循的原則
iterators 是算法和容器的橋樑,迭代器將容器中的一段範圍告訴算法
Iterator由於算法的執行需要,要具備5個associated type:
- iterator_traits<_Iter>::iteraptor_category:迭代器的類型 ,有的只能++ 、有的能-- 、有的能跳躍前進
- value_type 指向元素的類型
- difference_type:兩個iterator間的距離用什麼 type來表示
- reference: 未被使用
- 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