Namespaces
Variants

std::ranges::concat_view<Views...>:: iterator

From cppreference.net
Ranges library
Range adaptors
template < bool Const >
class /*iterator*/
(1) ( 説明専用* )
ヘルパーコンセプト
template < bool Const, class ... Rs >
concept /*concat-is-random-access*/ = /* 説明を参照 */ ;
(2) ( 説明専用* )
template < bool Const, class ... Rs >
concept /*concat-is-bidirectional*/ = /* 説明を参照 */ ;
(3) ( 説明専用* )
1) ranges:: concat_view < Views... > :: iterator は、 begin() および end() によって返されるイテレータの型である。 ranges:: concat_view < Views... > の。
2) Fs を、 Rs の最後の要素を除くすべての要素からなるパックとする。次と等価:

template < bool Const, class ... Rs >
concept concat-is-random-access = // 説明専用
all-random-access  < Const, Rs... > &&
( ranges:: common_range < maybe-const  < Const, Fs >> && ... ) ;

.
3) Fs を、 Rs の最後の要素を除くすべての要素からなるパックとする。次と等価:

template < bool Const, class ... Rs >
concept concat-is-bidirectional = // 説明専用
all-bidirectional  < Const, Rs... > &&
( ranges:: common_range < maybe-const  < Const, Fs >> && ... ) ;

.

目次

テンプレートパラメータ

Const - イテレータが定数イテレータかどうか

ネスト型

説明専用型
定義
base-iter std:: variant < ranges:: iterator_t < maybe-const  < Const, Views >> ... >
( 説明専用メンバ型* )
イテレータプロパティ型
定義
iterator_concept イテレータタグ , 下記参照
iterator_category
(条件付きで存在)
イテレータタグ, 下記参照
value_type concat-value-t  < maybe-const  < Const, Views > ... >
difference_type

std:: common_type_t < ranges:: range_difference_t < maybe-const  < Const, Views >> ... >

イテレータコンセプトの決定

iterator_concept は以下のように定義されます:

イテレータカテゴリの判定

iterator_category は、 all-forward  < Const, Views... > がモデル化されている場合にのみ定義されます。この場合、以下のように定義されます:

データメンバ

メンバー 定義
maybe-const  < Const, ranges:: concat_view > * parent_ concat_view へのポインタ
( 説明専用メンバーオブジェクト* )
base-iter it_ 現在のビューへのイテレータ
( 説明専用メンバーオブジェクト* )

メンバー関数

イテレータを構築する
(public member function)
要素にアクセスする
(public member function)
インデックスによる要素へのアクセス
(public member function)
基盤となるイテレータを進める、または戻す
(public member function)
Exposition-only 関数テンプレート
it_ が現在のビューの終端である場合、次のビューの先頭で置き換える
( exposition-only member function* )
it_ を前の位置を指すようにデクリメントする
( exposition-only member function* )
指定されたオフセット分だけ現在位置を進める
( exposition-only member function* )
指定された値分だけ現在位置をデクリメントする
( exposition-only member function* )

非メンバー関数

基底となるイテレータを比較する
(関数)
イテレータ演算を実行する
(関数)
(C++26)
基底となるイテレータの間接参照結果を、関連する右辺値参照型にキャストする
(関数)
(C++26)
2つの基底となるイテレータが指すオブジェクトを交換する
(関数)

プレビュー版は Compiler Explorer で確認できます。

#include <iostream>
#include <iterator>
#include <ranges>
int main()
{
    namespace views = std::views;
    static constexpr int p[]{1, 2, 3};
    static constexpr auto e = {4, 5};
    auto t = views::iota(6, 9);
    auto cat = views::concat(p, e, t);
    auto dog = views::concat(cat, cat);
    for (auto i{dog.begin()}; i != std::default_sentinel; ++i)
        std::cout << *i << ' ';
    std::cout << '\n';
}

出力:

1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8

参考文献

  • C++26標準 (ISO/IEC 14882:2026):
  • 26.7.18.3 クラステンプレート concat_view::iterator [range.concat.iterator]