C++STL源码分析(三):迭代器和iterator Teaits
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