次の方法で共有


iota_view クラス (C++ 標準ライブラリ)

初期値を繰り返しインクリメントして、要素のシーケンスのビューを生成します。 シーケンスは、境界付けすることも、バインド解除することもできます。

構文

template<std::weakly_incrementable W, std::semiregular Bound = std::unreachable_sentinel_t>
    requires __WeaklyEqualityComparableWith<W, Bound> && std::copyable<W>
class iota_view : public ranges::view_interface<iota_view<W, Bound>>;

テンプレート パラメーター

W
シーケンス内の値の型。 指定した型は operator++をサポートする必要があります。

Bound
終了値の型。 Boundstd::unreachable_sentinel_t (既定値) の場合、ビューは無制限になります。

特性の表示

以下の項目の説明については、 View クラスの特性を参照してください。

特徴 説明
範囲アダプター views::iota
基になる範囲 このビューではメンバーが生成されるため、適用されません
要素の種類 テンプレート パラメーターと同じ W
反復子カテゴリの表示 の種類に応じて、random_access_rangeまでのinput_rangeをサポートしますW
サイズ 範囲に終了値がある場合にのみ、無限の系列ではありません。
const対応 はい
共通範囲 Boundが同じ型である場合のみW
借用範囲 はい

メンバー

メンバー関数 説明
コンストラクター C++20 ビューを構築します。
beginC++20 最初の要素を指す反復子を取得します。
endC++20 ビューの最後にあるセンチネルを取得します。
sizeC++20 要素の数を取得します。
継承の対象 view_interface 説明
backC++20 最後の要素を取得します。
emptyC++20 ビューが空かどうかをテストします。
frontC++20 最初の要素を取得します。
operator[]C++20 指定した位置にある要素を取得します。
operator boolC++20 ビューが空でないかどうかをテストします。

解説

iota_viewを作成するには、iota範囲アダプターを使用することをお勧めします。 範囲アダプターは、ビュー クラスを作成するための目的の方法です。 独自のカスタム ビューの種類を作成する場合は、ビューの種類が公開されます。

値のシーケンスには、1、2、3、'a'、'b'、'c' などの整数値、または範囲の連続する要素を指定できます。

このビューは通常、一連の値を反復処理するために使用されます。 次に例を示します。

for (int i : iota_view{1, 10}) // iterate over a view of the integers 1 through 9
{
    std::cout << i << ’ ’; // 1 2 3 4 5 6 7 8 9
}

要件

Header: <ranges> (C++20 以降)

名前空間: std::ranges

コンパイラ オプション: /std:c++20 以降が必要です。

コンストラクター

iota_viewのインスタンスを作成します。

1) iota_view() requires std::default_initializable<W> = default;
2) constexpr explicit iota_view(W value);
3) constexpr iota_view(std::type_identity_t<W> value, std::type_identity_t<Bound> bound);
4) constexpr iota_view( /*iterator*/ first, /*sentinel*/ last );

パラメーター

value
系列の開始値。

bound
系列の境界。 これは、系列の最後の値より 1 大きい値です。

テンプレート パラメーターの型の詳細については、「 Template パラメーターを参照してください。

解説

1) 既定で初期化されたテンプレート型Wによって決定される開始値と終了値を持つiota_viewを作成します。
2) 指定された開始値と、値初期化型Wによって決定される終了値を持つiota_viewを作成します。
3) 指定した開始値と終了値を持つ境界付き iota_view を作成します。 終了値は、指定された最後の値より 1 小さい値です。
4) サブビューの作成に使用します。 たとえば、std::ranges::iota_view(start, end);startendは、サブビューの開始と終了を指す反復子です。

このクラスを直接作成するのではなく、 iota_view を簡単に作成するには、 iota 範囲アダプターを使用します。 範囲アダプターは、ビュー クラスを作成するための目的の方法です。 独自のカスタム ビューの種類を作成する場合は、ビューの種類が公開されます。

バインドの型が unreachable_sentinel_t場合、結果のビューは境界付けされます。

バインドを値初期化するコンストラクターのいずれかを使用すると、バインドはその型の既定で初期化された値になります。 たとえば、iota_view<int, int>{}は、既定で構築された int 値とバインドの両方が0されるため、intの空の範囲です。 また、既定で構築されたintバインドが0されるため、iota_view<int, int>{-4}-4, -3, -2, -1されます。

iota_view コンストラクターの例

// requires /std:c++20, or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::ranges::iota_view<int> iv; // create an iota_view with an unbounded range, starting at 0 
    std::ranges::iota_view<int> iv2(5); // create an iota_view with an unbounded range, starting at 5.
    std::ranges::iota_view<int, int> iv3{5, 10}; // create an iota_view with a bounded range, starting at 5 and ending at 9
    
    std::vector<int> v{10, 20, 35, 45, 50, 66, 77, 82, 90, 100};
    auto start = std::ranges::find(v, 35);
    auto end = std::ranges::find(v, 82);
    for (auto &&val : std::ranges::iota_view(start, end))
    {
        std::cout << *val << ' '; // outputs 35 45 50 66 77
    }
}

begin

ビューの最初の要素を指す反復子を取得します。

constexpr auto begin();
constexpr auto begin() const requires range<const V>;

パラメーター

ありません。

戻り値

ビューの最初の要素を指す反復子。

end

ビューの末尾にあるエンド センチネルを取得します。

constexpr auto end();
constexpr auto end() const requires ranges::range<const V>;

パラメーター

ありません。

戻り値

iota_viewが無制限の場合は、std::unreachable_sentinelを返します。

iota_viewがバインドされている場合は、シーケンス内の最後の値を超えてセンチネルを指す反復子を返します。

size

ビュー内の要素の数を取得します。 iota_viewは境界付けする必要があります。

constexpr auto size() requires
    (same_as<W, Bound> && advanceable <W>) ||
    (integral<W> && integral<Bound>) ||
    sized_sentinel_for<Bound, W>;

パラメーター

ありません。

戻り値

iota_view にある要素の数。

解説

無制限のiota_viewsize()を呼び出すことはできません。

関連項目

<ranges>
iota() 範囲アダプター
std::numerics::iota
クラスの表示