Spec-Zone.ru › C++

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

reverse_iterator& operator++();
(1) (constexpr начиная с C++17)
reverse_iterator& operator--();
(2) (constexpr начиная с C++17)
reverse_iterator operator++( int );
(3) (constexpr начиная с C++17)
reverse_iterator operator--( int );
(4) (constexpr начиная с C++17)
reverse_iterator operator+( difference_type n ) const;
(5) (constexpr начиная с C++17)
reverse_iterator operator-( difference_type n ) const;
(6) (constexpr начиная с C++17)
reverse_iterator& operator+=( difference_type n );
(7) (constexpr начиная с C++17)
reverse_iterator& operator-=( difference_type n );
(8) (constexpr начиная с C++17)

Перемещает базовый итератор в обратном направлении.

1,3) Уменьшает значение базового итератора.
2,4) Увеличивает значение базового итератора.
5) Возвращает reverse_iterator, базовый итератор которого сдвинут на -n позиций.
6) Возвращает reverse_iterator, базовый итератор которого сдвинут на n позиций.
7) Сдвигает базовый итератор на -n позиций.
8) Сдвигает базовый итератор на n позиций.

Параметры

n - позиция относительно текущего положения

Возвращаемое значение

1,2) *this
3,4) Копия *this, созданная до изменения
5) reverse_iterator(base() - n);
6) reverse_iterator(base() + n);
7,8) *this

Пример

#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) << '\n'; // 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;
}

Вывод:

3 4 1 1 4
7 8

См. также

operator+
перемещает итератор вперёд
(шаблон функции)
operator-
вычисляет расстояние между двумя адаптерами итераторов
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/reverse_iterator/operator_arith

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API