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
, созданная до изменения.