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