废弃std::iterator

git-change

在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;