Namespaces
Variants

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

ja.cppreference.net より
 
 
範囲ライブラリ
範囲アダプタ
 
 
constexpr /*iterator*/& operator++();
(1) (C++20以上)
constexpr void operator++( int );
(2) (C++20以上)
constexpr /*iterator*/ operator++( int )
    requires /*ref-is-glvalue*/ && ranges::forward_range<Base> &&
             ranges::forward_range<ranges::range_reference_t<Base>>;
(3) (C++20以上)
constexpr iterator& operator--()
    requires /*ref-is-glvalue*/ && ranges::bidirectional_range<Base> &&
             ranges::bidirectional_range<ranges::range_reference_t<Base>> &&
             ranges::common_range<ranges::range_reference_t<Base>>;
(4) (C++20以上)
constexpr /*iterator*/ operator--( int )
    requires /*ref-is-glvalue*/ && ranges::bidirectional_range<Base> &&
             ranges::bidirectional_range<ranges::range_reference_t<Base>> &&
             ranges::common_range<ranges::range_reference_t<Base>>;
(5) (C++20以上)

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

inner_ と outer_ を元となるイテレータとし、parent_ を親の ranges::join_view へのポインタ、定数 /*ref-is-glvalue*/ を std::is_reference_v<ranges::range_reference_t<Base>> とします。

1) /*inner-range*/ を次のように定義します:
  • *outer_、ただし /*ref-is-glvalue*/ == true の場合;
  • *parent_->inner_ それ以外の場合。

以下と同等:

auto&& inner_rng = /*inner-range*/;
if (++inner_ == ranges::end(inner_rng))
{
    ++outer_;
    satisfy();
}
return *this;
2) 以下と同等: ++*this。
3) 以下と同等:
auto tmp = *this;
++*this;
return tmp;
4) 以下と同等:
if (outer_ == ranges::end(parent_->base_))
    inner_ = ranges::end(*--outer_);
while (inner_ == ranges::begin(*outer_))
    inner_ = ranges::end(*--outer_);
--inner_;
return *this;
5) 以下と同等:
auto tmp = *this;
--*this;
return tmp;

パラメータ

(なし)

戻り値

1,4) * this
2) (なし)
3,5) 変更前に行われた * this のコピー。