迭代器概述
基本概念
迭代器概念是可用于标识和访问容器元素的一种类型。迭代器按基本用法可分为5种:输入迭代器(InputIterator)、输出迭代器(OutputIterator)、前向迭代器(ForwardIterator)、双向迭代器(BidirectionalIterator)和随机访问迭代器(RandomAccessIterator)。迭代器可以看做是指针的抽象。输入迭代器(InputIterator)
InputIterator是一种可以从指向元素读数据的迭代器。这种迭代器只能向前移动,只保证单向算法有效性:一旦一个输入迭代器一直递增,其之前的值的副本可能会失效。假设i和j是InputIterator,它们支持的操作有以下几种:
输出迭代器(OutputIterator)
OutputIterator与输入迭代器相对,它是一种可以向指向元素写入数据的迭代器(一个实现输出迭代器的典型例子是输出流迭代器std::ostream_iterator)。输出迭代器与输入迭代器一样只能向前移动。OutputIterator支持的操作如下:
前向迭代器(ForwardIterator)
前向迭代器可以从指向元素中读取数据,与InputIterator不同的是,它支持多通道算法。例如,它保证两个指向同一个元素的迭代器pos1, pos2, pos1 == pos2 返回true,并且对pos1, pos2调用自增操作符之后,二者仍然指向相同元素。即++pos1 == ++pos2前向迭代器支持的操作与输入迭代器相同
双向迭代器(DirectionalIterator)
双向迭代器是在前向迭代器的基础上增加了反向移动的特性。即增加了i--和--i操作。随机访问迭代器(RandomAccessIterator)
顾名思义,随机访问器可以快速访问容器中任何位置的元素。其用法类似于指针的算术运算。
上述5种迭代器相互组合构成了我们见到的所有迭代器,如std::vector<T>::iterator、std::istream_iterator等。