std::reverse_iterator::operator++,+,+=,--,-,-=(3)

NAME
std::reverse_iterator::operator++,+,+=,--,-,-= - std::reverse_iterator::operator++,+,+=,--,-,-=

Synopsis
   reverse_iterator& (until
   operator++(); C++17)
   constexpr (since
   reverse_iterator& C++17)
   operator++();
   reverse_iterator& (until
   operator--(); C++17)
   constexpr (since
   reverse_iterator& C++17)
   operator--();
   reverse_iterator (until
   operator++( int ); C++17)
   constexpr (since
   reverse_iterator C++17)
   operator++( int );
   reverse_iterator (until
   operator--( int ); C++17)
   constexpr (since
   reverse_iterator C++17)
   operator--( int );
   reverse_iterator
   operator+( (until
   difference_type n C++17)
   ) const;
   constexpr
   reverse_iterator (since
   operator+( C++17)
   difference_type n (1)
   ) const;
   reverse_iterator
   operator-( (2) (until
   difference_type n C++17)
   ) const; (3)
   constexpr
   reverse_iterator (since
   operator-( (4) C++17)
   difference_type n
   ) const; (5)
   reverse_iterator&
   operator+=( (until
   difference_type n C++17)
   );
   constexpr (6)
   reverse_iterator& (since
   operator+=( C++17)
   difference_type n
   ); (7)
   reverse_iterator&
   operator-=( (until
   difference_type n C++17)
   );
   constexpr (8)
   reverse_iterator& (since
   operator-=( C++17)
   difference_type n
   );
   Increments or decrements the iterator. Inverse operations are applied to the
   underlying operator because of the reverse order.
   1-2) Pre-increments or pre-decrements by one respectively.
   3-4) Post-increments or post-decrements by one respectively.
   5-6) Returns an iterator which is advanced by n or -n positions respectively.
   7-8) Advances the iterator by n or -n positions respectively.

Parameters
   n - position relative to current location.

Return value
   1-2) *this.
   3-4) a copy of *this that was made before the change.
   5-6) reverse_iterator(base()-n) or reverse_iterator(base()+n) respectively.
   7-8) *this.

Example
// Run this code
 #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) << ' '; // OK: 3
     std::cout << *(--rl) << ' '; // OK: 4
     // The following statements raise compilation error because the
     // underlying iterator does not model the random access iterator:
 // *(rl + 3) = 13;
 // rl += 3;
 // rl -= 3;
 }

Output:
 3 4 1 1 4
 7 8

See also
   operator+ advances the iterator
             (function template)
   operator- computes the distance between two iterator adaptors
             (function template)