Namespaces
Variants

operator+,-(ranges::concat_view::iterator)

ja.cppreference.net より
 
 
Ranges ライブラリ
範囲アダプタ
 
 
friend constexpr /*iterator*/
    operator+( const /*iterator*/& it, difference_type n )
        requires /*concat-is-random-access*/<Const, Views...>;
(1) (C++26 から)
friend constexpr /*iterator*/
    operator+( difference_type n, const /*iterator*/& it )
        requires /*concat-is-random-access*/<Const, Views...>;
(2) (C++26 から)
friend constexpr /*iterator*/
    operator-( const /*iterator*/& it, difference_type n )
        requires /*concat-is-random-access*/<Const, Views...>;
(3) (C++26 から)
friend constexpr difference_type
    operator-( const /*iterator*/& x, const /*iterator*/& y )
        requires /*concat-is-random-access*/<Const, Views...>;
(4) (C++26 から)
friend constexpr difference_type
    operator-( const /*iterator*/& x, std::default_sentinel_t )
        requires /* see description */;
(5) (C++26 から)
friend constexpr difference_type
    operator-( std::default_sentinel_t, const /*iterator*/& x )
        requires /* see description */;
(6) (C++26 から)

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

1) auto t = it; t += n; return t; と同等。
2) return it + n; と同等。
3) auto t = it; t -= n; return t; と同等。
4) Ix を x.it_ .index() とし、Iy を y.it_ .index() とします:
  • もし Ix > Iy が true ならば、difference_type result = ranges::distance(y.get-iter <Iy>(), y.get-end <Iy>());
    for (std::size_t I = Iy + 1; I < Ix; I++)
        result += ranges::distance(x.get-view <I>());
    return result + ranges::distance(x.get-begin <Ix>(), x.get-iter <Ix>());
    と同等。
  • そうでなければ、もし Ix < Iy が true ならば、return -(y - x); と同等。
  • そうでなければ、return x.get-iter <Ix>() - y.get-iter <Iy>(); と同等。
x.it_ .valueless_by_exception() || y.it_ .valueless_by_exception() が true の場合、動作は未定義。
5) Ix を x.it_ .index() とし、difference_type result = ranges::distance(x.get-iter <Ix>(), x.get-end <Ix>());
for (std::size_t I = Ix + 1, count = sizeof...(Views); I < count; I++)
    result += ranges::distance(x.get-view <I>());
return -result;
と同等。
Fs を Views の最初の要素を除くすべての要素からなるパックとすると、requires 節の式は

(std::sized_sentinel_for<ranges::sentinel_t<maybe-const <Const, Views>>,
                         ranges::iterator_t<maybe-const <Const, Views>>> && ...) &&
    (ranges::sized_range<maybe-const <Const, Fs>> && ...)

と同等。
x.it_ .valueless_by_exception() が true の場合、動作は未定義。
6) return -(x - std::default_sentinel); と同等。
Fs を Views の最初の要素を除くすべての要素からなるパックとすると、requires 節の式は

(std::sized_sentinel_for<ranges::sentinel_t<maybe-const <Const, Views>>,
                         ranges::iterator_t<maybe-const <Const, Views>>> && ...) &&
    (ranges::sized_range<maybe-const <Const, Fs>> && ...)

と同等。
x.it_ .valueless_by_exception() が true の場合、動作は未定義。

これらの関数は通常の非修飾または修飾付き名前探索では可視ではなく、引数依存の名前探索によってのみ、concat_view::iterator <Const>が引数の関連クラスである場合に発見できます。

パラメータ

it, x, y - the iterators
n - 現在位置からの相対位置

戻り値

上記の通り。

例

関連項目

基となるイテレータを進めるまたは戻す
(公開メンバ関数)