C++学习笔记30——反向迭代器

来源:互联网 发布:matlab迭代算法 编辑:程序博客网 时间:2024/06/07 03:36

1,反向迭代器的概念

向后遍历序列的迭代器。这些迭代器颠倒了++和--的含义。
类型为:   std::reverse_iterator
头文件:  
#include <iterator>


容器操作也会提供反向迭代器rend和rbegin,其与end和begin的关系如下图所示:
range-rbegin-rend.svg

rbegin指向最后一个元素;rend指向第一个元素前面的位置。

2,反向迭代器的成员函数

(constructor)    构造一个新的迭代器适配器
operator=         赋值
base                  accesses the underlying iterator 转换为正常迭代器,注意转换后指向的是下一位置的元素
operator*       解引用,获取指向的值
operator->
operator[]      通过下标获取元素
++, ++(int)     advances or decrements the iterator
+=, +,
--, --(int),
-=, -

存疑:++与 ++(int) 有什么区别?



请注意base的位置发生了后移。

3,反向迭代器的用法

将反向迭代器赋值给find()函数,就变成了从后向前查找。
注意,当给find输入反向迭代器后,find返回的也是反向迭代器。
且不能直接将反向迭代器赋值给普通的迭代器。

如下示例为查找序列中最后一个为0的元素:
list<int> ilst = {520, 3132, 0, 3, 5, 9, 0, 8, 7};list<int> ::reverse_iterator r_iter = find(ilst.rbegin(), ilst.rend(), 0);for (list<int> ::iterator iter = --r_iter.base(); iter != ilst.end(); iter++){cout << *iter << endl;}
输出的是最后一个0到序列末尾的所有元素。


请注意base的位置发生了后移。
0 0
原创粉丝点击