迭代器定义 iterator :
struct _Iterator_base { // base of all iterators typedef _Unchecked_iterator_tag _Checked_iterator_category; typedef _Unchanged_checked_iterator_base_type_tag _Checked_iterator_base_type; typedef _Undefined_inner_type_tag _Inner_type; }; template<class _Category, class _Ty, class _Diff = ptrdiff_t, class _Pointer = _Ty *, class _Reference = _Ty&> struct iterator : public _Iterator_base { // base type for all iterator classes typedef _Category iterator_category; // 迭代器种类 typedef _Ty value_type; // 元素值类型 typedef _Diff difference_type; // 指针运算类型 typedef _Pointer pointer; // 元素指针类型 typedef _Reference reference; // 元素引用类型 };
vs的实现中又特化了三种迭代器:双向迭代器(_Bidit)、随机迭代器(_Ranit)、输出迭代器(_Outit)。
如果想实现自己的迭代器类型,建议从iterator派生,或者从上述三种特化类型进行派生。
template<class _Ty, class _Diff, class _Pointer, class _Reference> struct _Bidit // 双向迭代器 : public _Iterator_base { // base type for container bidirectional iterator classes typedef bidirectional_iterator_tag iterator_category; typedef _Ty value_type; typedef _Diff difference_type; typedef _Pointer pointer; typedef _Reference reference; }; template<class _Ty, class _Diff, class _Pointer, class _Reference> struct _Ranit // 随机迭代器 : public _Iterator_base { // base type for container random-access iterator classes typedef random_access_iterator_tag iterator_category; typedef _Ty value_type; typedef _Diff difference_type; typedef _Pointer pointer; typedef _Reference reference; }; struct _Outit // 输出迭代器 : public iterator<output_iterator_tag, void, void, void, void> { // base for output iterators };