在C++14之前,所有的Iterator都是继承自std::iterator类,在这个类中定义了五个type
1 2 3 4 5 6 7 8 9 10
| template<class Category, class T, class Distance = ptrdiff_t, class Pointer = T*, class Reference = T&> struct iterator { typedef T value_type; typedef Distance difference_type; typedef Pointer pointer; typedef Reference reference; typedef Category iterator_category; };
|
这五个type是为了在iterator_traits中提供给外部函数获取iterator的type
1 2 3 4 5 6 7 8 9
| template<class Iterator> struct iterator_traits { typedef typename Iterator::difference_type difference_type; typedef typename Iterator::value_type value_type; typedef typename Iterator::pointer pointer; typedef typename Iterator::reference reference; typedef typename Iterator::iterator_category iterator_category; };
|
之前是为了方便,才定义了一个基类,让所有的Iterator来继承。
在C++14后,废弃了std::iterator,让各自的iterator类自己定义五个type,这也是上面change log的内容;
对于reverse_iterator来说,之前继承了iterator,现在删除后,其offset会发生变化,第一个成员的Offset会从4bit变成0bit;