Namespaces
Variants

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以上)

イテレータをインクリメントまたはデクリメントします。

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 のコピー。