Scroll to navigation

std::reverse_iterator::operator++,+,+=,--,-,-=(3) C++ Standard Libary 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)

2022.07.31 http://cppreference.com