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
/* 未規定 */
iota
=
/* 未規定 */
;
|
(2) | (C++20以降) |
|
呼び出しシグネチャ
|
||
|
template
<
class
W
>
requires
/* 下記参照 */
|
(C++20以降) | |
|
template
<
class
W,
class
Bound
>
requires
/* 下記参照 */
|
(C++20以降) | |
目次 |
カスタマイゼーションポイントオブジェクト
views::iota
という名前は
カスタマイゼーションポイントオブジェクト
を表します。これは
関数オブジェクト
のconstな
リテラル
semiregular
クラス型です。詳細については
CustomizationPointObject
を参照してください。
データメンバ
| メンバー | 定義 |
W
value_
|
開始値
( 説明専用メンバーオブジェクト* ) |
Bound
bound_
|
センチネル値、到達不能な場合がある
( 説明専用メンバーオブジェクト* ) |
メンバー関数
iota_view
を作成する
(public member function) |
|
iota_view
の先頭イテレータを取得する
(public member function) |
|
iota_view
の終端を示すセンチネルを取得する
(public member function) |
|
iota_view
が空かどうかテストする(イテレータとセンチネルが等しいか比較)
(public member function) |
|
|
(optional)
|
iota_view
のサイズを取得する(境界がある場合のみ提供)
(public member function) |
std::ranges::view_interface から継承 |
|
|
(C++23)
|
範囲の先頭を指す定数イテレータを返す
(
std::ranges::view_interface<D>
のpublic member function)
|
|
(C++23)
|
範囲の定数イテレータ用センチネルを返す
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューが空でないかどうかを返す(
ranges::empty
が適用可能な場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの最初の要素を返す(
forward_range
を満たす場合に提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの最後の要素を返す(
bidirectional_range
と
common_range
を満たす場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの
n
番目
の要素を返す(
random_access_range
を満たす場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
推論ガイド
ネストされたクラス
|
イテレータ型
( 説明専用メンバクラス* ) |
|
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
(クラステンプレート) (カスタマイゼーションポイントオブジェクト) |
|
適応されたシーケンスの各要素を、要素の位置と値の両方を含むタプルにマッピングする
view
(クラステンプレート) (レンジアダプタオブジェクト) |