Iterator(迭代器)是一种 "可以迭代某序列内全部元素"的对象,可经过改编自寻常pointer的一致接口来完成工做。dom
Iterator奉行一个纯抽象的概念: 任何东西,只要行为相似iterator,就是一种Iterator。可是不一样的迭代器拥有不一样的能力。函数
废话很少了说咱们来了解一下迭代器的分类.spa
Output-iterator:对象
Output-iterator容许一步一步前行并搭配write动做.所以你能够经过Output-iterator对区间内的元素进行挨个赋值,可是不能使用Output-iterator对同一区间迭代2次.索引
其支持的操做:接口
*iter = val : 将val写到迭代器所指位置.input
++iter : 向前步进,返回新位置(也可能只是个无用的操做,参考std::ostream_iterator).it
iter++ : 向前步进,一般状况下返回旧位置(也可能只是个无用的操做,参考std::ostream_iterator).io
标准库提供了std::ostream_iterator是典型的 Output-iterator!stream
咱们经常使用的全部迭代器都具备Input-iterator的能力,并且更强.
Input-iterator:
Input-iterator迭代器只能一次一个之前进方向读取元素,按此顺序一个个返回元素值。
其支持的操做:
*iter : 返回读取到的值.
iter->member : 返回读取的元素的成员.
++iter : 向前步进(返回新位置).
iter++ : 向前步进(发挥旧位置).
iter1 == iter2 : 判断2个迭代器是否相等.
iter1 != iter2 : 判断2个迭代器是否不相等.
TYPE(iter) : 拷贝构造函数.
其中标准库对于Input-iterator的 ==和!= 没有要求: 若是两个input-iterator都不是尾后迭代器,且指向不一样位置,他们的比较结果会不相等.
其中标准库中的std::istream_iterator是典型的Input-iterator!
Forward-iterator:
Forward-iterator提供保证: 若是两个Forward-iterator都不是尾后迭代器,且指向不一样的位置,它们的比较结果必定不会相等!
其支持的操做:
*iter : 返回读取到的值.
iter->member : 访问读取到的元素的成员(若是有的话).
++iter : 向前步进(返回新位置).
iter++ : 向前步进(返回旧位置).
iter1 == iter2 : 判断2个迭代器是否相等.
iter1 != iter2 : 判断2个迭代器时候不相等.
TYPE() : 经过默认构造函数建立一个迭代器.
TYPE(iter) : 迭代器的拷贝构造函数.
iter1 = iter2 : 迭代器的拷贝赋值运算符.
两个Forward-iterator若是指向同一个元素,调用 == 会获得true, 若是二者同时递增会再次指向同一个元素.
其中标准库中的std::forward_list是典型的提供了Forward-iterator的表明.
Bidirectional-iterator:
Bidirectional-iterator是在Forward_iterator的基础上增长了回头的能力.换句话来讲,它支持递减操做,能够一步一步后退.
其支持的操做:
*iter : 返回读取到的值.
iter->member : 访问读取到的元素的成员(若是有的话).
++iter : 向前步进(返回新位置).
iter++ : 向前步进(返回旧位置).
iter1 == iter2 : 判断2个迭代器是否相等.
iter1 != iter2 : 判断2个迭代器时候不相等.
TYPE() : 经过默认构造函数建立一个迭代器.
TYPE(iter) : 迭代器的拷贝构造函数.
iter1 = iter2 : 迭代器的拷贝赋值运算符.
--iter : 步退返回新位置.
iter-- : 步退返回旧位置.
Random-access-iterator:
Random-access-iterator迭代器在Bidirectional-iterator的基础上增长了随机访问的能力。所以它必须提供iterator算术运算。
其支持的操做:
*iter : 返回读取到的值.
iter->member : 访问读取到的元素的成员(若是有的话).
++iter : 向前步进(返回新位置).
iter++ : 向前步进(返回旧位置).
iter1 == iter2 : 判断2个迭代器是否相等.
iter1 != iter2 : 判断2个迭代器时候不相等.
TYPE() : 经过默认构造函数建立一个迭代器.
TYPE(iter) : 迭代器的拷贝构造函数.
iter1 = iter2 : 迭代器的拷贝赋值运算符.
--iter : 步退返回新位置.
iter-- : 步退返回旧位置.
iter[n] : 访问索引位置为n的元素(针对寻常的 C-Style array).
iter+n : 将迭代器向前前进n个位置.
n+iter : 将迭代器向前前进n个位置.
iter - n: 将迭代器后退n个位置.
iter1 - iter2 : 返回2个迭代器之间的位置.
iter1 < iter2 : 判断iter1是否在iter2以前.
iter1 > iter2 :判断iter1是否在iter2以后.
iter1 <= iter2 :判断iter1是否不在iter2以后.
iter1 >= iter2 : 判断iter1是否不在iter2以前.