在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 };
View Code

相关文章: