[vs 2005]iterator

迭代器定义 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
};

你可能感兴趣的:(struct,Random,iterator,Class,reference,output)