在STL中,容器跟算法是分开设计的,算法是通过迭代器来对容器进行操作的。
在算法运用迭代器的时候,可能会用到其相应的型别,例如返回值为容器中元素的型别,又或者说根据迭代器的类型来选择更好的算法等等。
为了实现这一点,还有为了兼容内置型别的迭代器(vector迭代器直接使用原生pointer),STL使用了traits技法,用于提取迭代器的特性(相应的型别)。
1.首先在iterator中typedef相应的型别
1 // 这是迭代器的基类 所有迭代器必须定义这5种型别 2 template<class Category, class T, class Distance = ptrdiff_t, 3 class Pointer = T*, class Reference = T&> 4 struct iterator { 5 typedef Category iterator_category; 6 typedef T value_type; 7 typedef Distance difference_type; 8 typedef Pointer pointer; 9 typedef Reference reference; 10 };