std::ranges::join_with_view<V,Pattern>::iterator<Const>::operator++,--
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以上) |
イテレータをインクリメントまたはデクリメントします。
その後,内部イテレータと外部イテレータを次のように調整します:
- インクリメントされた内部イテレータがパターン範囲の終端イテレータである場合,次の内部範囲の先頭を指すイテレータに設定されます.
- インクリメントされた内部イテレータが内部範囲の終端イテレータである場合,外部イテレータがインクリメントされます.その後:
- 内部イテレータが終端イテレータでなくなるか,外部イテレータが終端イテレータになるまで,上記の操作を繰り返します.
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
のコピー。