STL的算法需要知道iterator的相关信息(iterator种类、iterator指向的元素的类型...),来决定使用最优化的算法。比如vector的iterator,那么就可以使用+,-操作;如果是list的iterator,那么就不可以使用+,-操作。所以,算法必须知道一些关于iterator的信息。所以在iterator这个类里,定义了如下和5个和iterator有关的信息:
template<typename Category,
typename T,
typename Distance = ptrdiff_t,
typename Pointer = T*,
typename Reference = T&>
struct iterator
{
typedef Category iterator_category;
typedef T value_type;
typedef Distance difference_type;
typedef Pointer pointer;
typedef Reference reference;
};
iterator_category:迭代器的类别,如输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器等。不同类型的迭代器支持的操作不同,在算法优化的时候需要用到。
value_type:迭代器指向的元素的类型,让算法知道容器中存储的数据类型。
difference_type:用于表示两个迭代器之间的距离的类型,通常是某种整数类型。
pointer:指向迭代器所指元素的指针类型。
reference:迭代器所指元素的引用类型。
iterator_category具体如下:
Input Iterator