http://blog.csdn.net/touzani/archive/2007/06/08/1643859.aspx
根据迭代器所支持的操作不同,在 STL 中定义了如下 5 种迭代器:
l 输入迭代器( input iterator )——用于读取容器中的信息,但不一定能够修改它。
n 输入迭代器 iter 通过解除引用(即 *iter ),来读取容器中其所指向元素之值;
n 为了使输入迭代器能够访问容器中的所有元素的值,必须使其支持(前 / 后缀格式的) ++ 操作符;
n 输入迭代器不能保证第二次遍历容器时,顺序不变;也不能保证其递增后,先前指向的值不变。即,基于输入迭代器的任何算法,都应该是单通( single-pass )的,不依赖于前一次遍历时的值,也不依赖于本次遍历中前面的值。
可见输入迭代器是一种单向的只读迭代器,可以递增但是不能递减,而且只能读不能写。适用于单通只读型算法。
l 输出迭代器( output iterator )——用于将信息传输给容器(修改容器中元素的值),但是不能读取。例如,显示器就是只能写不能读的设备,可用输出容器来表示它。也支持解除引用和 ++ 操作,也是单通的。所以,输出迭代器适用于单通只写型算法。
l 前向迭代器( forward iterator 正向迭代器)——只能使用 ++ 操作符来单向遍历容器(不能用 -- )。与 I/O 迭代器一样,前向迭代器也支持解除引用与 ++ 操作。与 I/O 迭代器不同的是,前向迭代器是多通的( multi-pass )。即,它总是以同样的顺序来遍历容器,而且迭代器递增后,仍然可以通过解除保存的迭代器引用,来获得同样的值。另外,前向迭代器既可以是读写型的,也可以是只读的。
l 双向迭代器( bidirectional iterator )——可以用 ++ 和 -- 操作符来双向遍历容器。其他与前向迭代器一样,也支持解除引用、也是多通的、也是可读写或只读的。
l 随机访问迭代器( random access iterator )——可直接访问容器中的任意一个元素的双向迭代器。