迭代器类别
迭代器类别 输入迭代器 输入迭代器:可以读取序列中的元素。一个输入迭代器必须支持 用于比较两个迭代器的相等和不相等运算符(==、!=) 用于推进迭代器的前置和后置递增运算(++) 用于读取元素的解引用运算符(*);解引用只会出现在赋值运算符的右侧 箭头运算符(->),等价于(*it).member,即,解引用迭代器,并提取对象的成员 输入迭代器只用于顺序访问。对于一个输入迭代器,*it++保证是有效的,但递增它可能导致所有其他指向流的迭代器失效。其结果就是,不能保证输入迭代器的状态可以保存下来并用来访问元素。因此,输入迭代器只能用于单遍扫描算法。算法find和accumulate要求输入迭代器;而istream_iterator是一种输入迭代器。 输出迭代器 输出迭代器:可以看做输入迭代器功能上的补集——只写而不读元素。输出迭代器必须支持 用于推进迭代器的前置和后置递增运算(++) 解引用运算符(*),只能出现在赋值运算符的左侧(向一个已经解引用的输出迭代器赋值,就是将值写入它所指向的元素) 我们只能向一个输出迭代器赋值一次。类似输入迭代器,输出迭代器只能用于单遍扫描算法。用作目的位置的迭代器通常都是输出迭代器。例如,copy函数的第三个参数就是输出迭代器。ostream_iterator类型也是输出迭代器。 前向迭代器 前向迭代器:可以读元素。这类迭代器只能在序列中沿一个方向移动