std::ranges::views::iota, std::ranges::iota_view
| ヘッダ <ranges> で定義 |
||
| template< std::weakly_incrementable W, std::semiregular Bound = std::unreachable_sentinel_t > |
(1) | (C++20以降) |
| namespace views { inline constexpr /* unspecified */ iota = /* unspecified */; |
(2) | (C++20以降) |
| 呼び出しシグネチャ |
||
| template< class W > requires /* 以下を参照 */ |
(C++20以降) | |
| template< class W, class Bound > requires /* 以下を参照 */ |
(C++20以降) | |
目次 |
カスタマイゼーションポイントオブジェクト
views::iota という名前は、関数オブジェクトであり、リテラルな semiregular クラス型の const のカスタマイズポイントオブジェクトを指します。説明のために、その型の cv 修飾されていないバージョンを __iota_fn と表記します。
__iota_fn のすべてのインスタンスは等価です。型 __iota_fn の異なるインスタンスを同じ引数で呼び出す効果は、インスタンスを表す式が lvalue であるか rvalue であるか、また const 修飾されているか否かに関わらず同等です(ただし、volatile 修飾されたインスタンスの呼び出しは保証されません)。したがって、views::iota は自由にコピーでき、そのコピーは相互に交換可能です。
型 Args... のセットが与えられた場合、std::declval<Args>()... が上記の views::iota の引数要件を満たす場合、__iota_fn は以下をモデル化します。
- std::invocable<__iota_fn, Args...>,
- std::invocable<const __iota_fn, Args...>,
- std::invocable<__iota_fn&, Args...>、および
- std::invocable<const __iota_fn&, Args...>.
それ以外の場合、__iota_fn の関数呼び出し演算子はオーバーロード解決に参加しません。
[編集] データメンバ
| メンバ | 定義 |
W value_ |
開始値 (説明用のメンバオブジェクト*) |
Bound bound_ |
終端値、到達不能な場合があります。 (説明用のメンバオブジェクト*) |
[編集] メンバ関数
iota_view を作成します。(public member function) | |
iota_view の開始イテレータを取得します。(public member function) | |
iota_view の終端を示すセンチネルを取得します。(public member function) | |
iota_view が空かどうかをテストします(つまり、イテレータとセンチネルが等しいかどうか)。(public member function) | |
| (オプション) |
iota_view のサイズを取得します(有界の場合のみ提供されます)。(public member function) |
std::ranges::view_interface から継承 | |
| (C++23) |
範囲の先頭への定数イテレータを返す ( std::ranges::view_interface<D> の public メンバ関数) |
| (C++23) |
範囲の定数イテレータの番兵を返す ( std::ranges::view_interface<D> の public メンバ関数) |
| 派生ビューが空でないかどうかを返す。ranges::empty が適用可能な場合にのみ提供される ( std::ranges::view_interface<D> の public メンバ関数) | |
派生ビューが forward_range を満たす場合に、派生ビューの最初の要素を返す( std::ranges::view_interface<D> の public メンバ関数) | |
派生ビューが bidirectional_range と common_range の両方を満たす場合にのみ、派生ビューの最後の要素を返す( std::ranges::view_interface<D> の public メンバ関数) | |
派生ビューが random_access_range を満たす場合にのみ、派生ビューの n番目の要素を返す( std::ranges::view_interface<D> の public メンバ関数) | |
[編集] 推論ガイド
[編集] ネストされたクラス
| イテレータ型 (説明専用メンバクラス*) | |
iota_view が有界で、Bound と W が異なる型の場合に使用されるセンチネル型。(説明専用メンバクラス*) |
[編集] ヘルパーテンプレート
| template< std::weakly_incrementable W, std::semiregular Bound > constexpr bool ranges::enable_borrowed_range<ranges::iota_view<W, Bound>> = true; |
(C++20以降) | |
この ranges::enable_borrowed_range の特殊化により、iota_view は borrowed_range を満たします。
[編集] 例
#include <algorithm> #include <iostream> #include <ranges> struct Bound { int bound; bool operator==(int x) const { return x == bound; } }; int main() { for (int i : std::ranges::iota_view{1, 10}) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1, 10)) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1, Bound{10})) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1) | std::views::take(9)) std::cout << i << ' '; std::cout << '\n'; std::ranges::for_each(std::views::iota(1, 10), [](int i){ std::cout << i << ' '; }); std::cout << '\n'; }
出力
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 4096 | C++20 | views::iota は iota_view をそのままコピーできた |
禁止 |
| P2325R3 | C++20 | iota_view は W が semiregular であることを要求していたview は default_initializable を要求するため |
W が copyable であることのみを要求する |
[編集] 関連項目
| (C++11) |
開始値からの連続した増分値で範囲を埋める (関数テンプレート) |
| (C++23) |
開始値からの連続した増分値で範囲を埋める (アルゴリズム関数オブジェクト) |
同じ値を繰り返し生成することで得られるシーケンスからなる view(クラステンプレート) (カスタマイゼーションポイントオブジェクト) |