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
終了値の型。 Bound
がstd::unreachable_sentinel_t
(既定値) の場合、ビューは無制限になります。
特性の表示
以下の項目の説明については、 View クラスの特性を参照してください。
特徴 | 説明 |
---|---|
範囲アダプター | views::iota |
基になる範囲 | このビューではメンバーが生成されるため、適用されません |
要素の種類 | テンプレート パラメーターと同じ W |
反復子カテゴリの表示 | の種類に応じて、random_access_range までのinput_range をサポートしますW |
サイズ | 範囲に終了値がある場合にのみ、無限の系列ではありません。 |
const 対応 |
はい |
共通範囲 | Bound が同じ型である場合のみW |
借用範囲 | はい |
メンバー
メンバー関数 | 説明 |
---|---|
コンストラクター C++20 | ビューを構築します。 |
begin C++20 |
最初の要素を指す反復子を取得します。 |
end C++20 |
ビューの最後にあるセンチネルを取得します。 |
size C++20 |
要素の数を取得します。 |
継承の対象 view_interface |
説明 |
back C++20 |
最後の要素を取得します。 |
empty C++20 |
ビューが空かどうかをテストします。 |
front C++20 |
最初の要素を取得します。 |
operator[] C++20 |
指定した位置にある要素を取得します。 |
operator bool C++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);
start
とend
は、サブビューの開始と終了を指す反復子です。
このクラスを直接作成するのではなく、 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_view
でsize()
を呼び出すことはできません。