Namespaces
Variants

std::reverse_iterator<Iter>:: operator++,+,+=,--,-,-=

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
reverse_iterator & operator ++ ( ) ;
(1) (自 C++17 起为 constexpr)
reverse_iterator & operator -- ( ) ;
(2) (自 C++17 起为 constexpr)
reverse_iterator operator ++ ( int ) ;
(3) (自 C++17 起为 constexpr)
reverse_iterator operator -- ( int ) ;
(4) (自 C++17 起为 constexpr)
reverse_iterator operator + ( difference_type n ) const ;
(5) (自 C++17 起为 constexpr)
reverse_iterator operator - ( difference_type n ) const ;
(6) (自 C++17 起为 constexpr)
reverse_iterator & operator + = ( difference_type n ) ;
(7) (自 C++17 起为 constexpr)
reverse_iterator & operator - = ( difference_type n ) ;
(8) (自 C++17 起为 constexpr)

反向递增或递减底层迭代器。

重载版本 等效实现
(1) -- current ; return * this ;
(2) ++ current ; return * this ;
(3) reverse_iterator tmp = * this ; -- current ; return tmp ;
(4) reverse_iterator tmp = * this ; ++ current ; return tmp ;
(5) return reverse_iterator ( current - n ) ;
(6) return reverse_iterator ( current + n ) ;
(7) current - = n ; return * this ;
(8) current + = n ; return * this ;

目录

参数

n - 相对于当前位置的偏移量

返回值

如上所述。

示例

#include <iostream>
#include <iterator>
#include <list>
#include <vector>
int main()
{
    std::vector v{0, 1, 2, 3, 4};
    auto rv = std::reverse_iterator{v.rbegin()};
    std::cout << *(++rv) << ' '; // 3
    std::cout << *(--rv) << ' '; // 4
    std::cout << *(rv + 3) << ' '; // 1
    rv += 3;
    std::cout << rv[0] << ' '; // 1
    rv -= 3;
    std::cout << rv[0] << '\n'; // 4
    std::list l{5, 6, 7, 8};
    auto rl = std::reverse_iterator{l.rbegin()};
    std::cout << *(++rl) << ' '; // 正常:3
    std::cout << *(--rl) << '\n'; // 正常:4
    // 以下语句会引发编译错误,因为
    // 底层迭代器不满足随机访问迭代器要求:
//  *(rl + 3) = 13;
//  rl += 3;
//  rl -= 3;
}

输出:

3 4 1 1 4
7 8

参见

使迭代器前进
(函数模板)
计算两个迭代器适配器间的距离
(函数模板)