Spec-Zone.ru › C++

std::ranges::join_with_view<V,Pattern>::iterator<Const>::operator++,--

constexpr /*iterator*/& operator++();
(1) (начиная с C++23)
constexpr void operator++( int );
(2) (начиная с C++23)
constexpr /*iterator*/ operator++( int )
    requires std::is_reference_v</*InnerBase*/> &&
             ranges::forward_range</*Base*/> &&
             ranges::forward_range</*InnerBase*/>;
(3) (начиная с C++23)
constexpr /*iterator*/& operator--()
    requires std::is_reference_v</*InnerBase*/> &&
             ranges::bidirectional_range</*Base*/> &&
             ranges::bidirectional_range</*InnerBase*/> &&
             ranges::common_range</*InnerBase*/> &&
             ranges::bidirectional_range</*PatternBase*/> &&
             ranges::common_range</*PatternBase*/>;
(4) (начиная с C++23)
constexpr /*iterator*/ operator--( int )
    requires std::is_reference_v</*InnerBase*/> &&
             ranges::bidirectional_range</*Base*/> &&
             ranges::bidirectional_range</*InnerBase*/> &&
             ranges::common_range</*InnerBase*/> &&
             ranges::bidirectional_range</*PatternBase*/> &&
             ranges::common_range</*PatternBase*/>;
(5) (начиная с C++23)

Увеличивает или уменьшает итератор.

1) Увеличивает внутренний итератор, как если бы выполнялось std::visit([](auto&it){++it;}, inner_it_ );.
После этого корректирует внутренний и внешний итераторы следующим образом:
  • Если увеличенный внутренний итератор является итератором конца диапазона шаблона, он устанавливается в итератор, указывающий на начало следующего внутреннего диапазона.
  • Если увеличенный внутренний итератор является итератором конца внутреннего диапазона, внешний итератор увеличивается. Затем:
    • Если увеличенный внешний итератор не является итератором конца внешнего диапазона, внутренний итератор устанавливается в итератор, указывающий на начало диапазона шаблона.
    • В противном случае, если std::is_reference_v<InnerBase > является true, внутренний итератор устанавливается в итератор шаблона, содержащий особое значение.
  • Повторяет описанные выше операции, пока внутренний итератор не перестанет быть итератором конца либо внешний итератор не станет итератором конца.
2) Эквивалентно ++*this;.
3) Эквивалентно auto tmp = *this;++*this;return tmp;.
4) Если внешний итератор является итератором конца внешнего диапазона, уменьшает его и устанавливает внутренний итератор в итератор конца последнего внутреннего диапазона; в противном случае ничего не делает.
После этого корректирует внутренний и внешний итераторы следующим образом:
  • Если внутренний итератор указывает на начало внутреннего диапазона, он устанавливается в итератор конца диапазона шаблона.
  • Если внутренний итератор указывает на начало диапазона шаблона, внешний итератор уменьшается, а внутренний итератор устанавливается в итератор конца предыдущего внутреннего диапазона.
  • Повторяет описанные выше операции, пока внутренний итератор не перестанет указывать на начало какого-либо диапазона.
Наконец, уменьшает внутренний итератор, как если бы выполнялось std::visit([](auto&it){--it;}, inner_it_ );.
5) Эквивалентно auto tmp = *this;--*this;return tmp;.

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

1,4) *this
3,5) Копия *this, созданная до изменения.

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

Spec-Zone.ru

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