std::reverse_iterator

来自cppreference.com
< cpp‎ | iterator
定义于头文件 <iterator>
template< class Iterator >

class reverse_iterator : public std::iterator<
                           typename std::iterator_traits<Iterator>::iterator_category,
                           typename std::iterator_traits<Iterator>::value_type,
                           typename std::iterator_traits<Iterator>::difference_type,
                           typename std::iterator_traits<Iterator>::pointer,

                           typename std::iterator_traits<Iterator>::reference >
(C++17 前)
template< class Iterator >
class reverse_iterator;
(C++17 起)

std::reverse_iterator 是一个反转给定迭代器方向的迭代器适配器。换言之,提供双向迭代器时, std::reverse_iterator 产生一个新的迭代器,它从底层的双向迭代器所定义的序列的末尾移动到开端。

对于从迭代器 i 构造的 r 逆向迭代器,关系 &*r == &*(i-1) 始终为 true (只要 r 可解引用);从而构造自末尾后一位置的迭代器的逆向迭代器解引用到序列的最后元素。

这是标准库容器的成员函数 rbegin()rend() 所返回的迭代器。

range-rbegin-rend.svg

目录

[编辑] 成员类型

成员类型 定义
value_type std::iterator_traits<Iterator>::value_type
difference_type std::iterator_traits<Iterator>::difference_type
pointer std::iterator_traits<Iterator>::pointer
reference std::iterator_traits<Iterator>::reference
iterator_category std::iterator_traits<Iterator>::iterator_category

注意:在 C++17 前,这些成员类型要求通过从 std::iterator< std::iterator_traits<Iterator>::iterator_category
, std::iterator_traits<Iterator>::value_type
, std::iterator_traits<Iterator>::difference_type
, std::iterator_traits<Iterator>::pointer
, std::iterator_traits<Iterator>::reference
>
继承而获得。

成员类型 定义
iterator_type Iterator

[编辑] 成员函数

构造新的迭代器适配器
(公开成员函数) [编辑]
赋值另一迭代器
(公开成员函数) [编辑]
访问底层迭代器
(公开成员函数) [编辑]
访问指向的元素
(公开成员函数) [编辑]
按索引访问元素
(公开成员函数) [编辑]
推进或回退迭代器
(公开成员函数) [编辑]

[编辑] 成员对象

成员名称 定义
current (受保护成员对象) base() 迭代器的副本

[编辑] 非成员函数

比较底层迭代器
(函数模板) [编辑]
令迭代器前进
(函数模板) [编辑]
计算二个迭代器适配器间的距离
(函数模板) [编辑]

[编辑] 参阅

#include <iostream>
#include <string>
#include <iterator>
 
int main()
{
    std::string s = "Hello, world";
    std::reverse_iterator<std::string::iterator> r = s.rbegin();
    r[7] = 'O'; // 以 'O' 替换 'o'
    r += 7; // 迭代器现在指向 'O'
    std::string rev(r, s.rend());
    std::cout << rev << '\n';
}

输出:

OlleH

[编辑] 参阅

(C++17 中弃用)
简化简单迭代器所要求类型定义的基类
(类模板) [编辑]