STL: std::iterator_traits.

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以前.

相关文章
相关标签/搜索