Namespaces
Variants

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

From ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
 
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 , созданная до изменения.