Namespaces
Variants

std::ranges:: views:: iota, std::ranges:: iota_view

From cppreference.net
Ranges library
Range adaptors
ヘッダーで定義 <ranges>
template < std:: weakly_incrementable W,

std:: semiregular Bound = std:: unreachable_sentinel_t >
requires /*weakly-equality-comparable-with*/ < W, Bound > && std:: copyable < W >
class iota_view

: public ranges:: view_interface < iota_view < W, Bound >>
(1) (C++20以降)
namespace views {

inline constexpr /* 未規定 */ iota = /* 未規定 */ ;

}
(2) (C++20以降)
呼び出しシグネチャ
template < class W >

requires /* 下記参照 */

constexpr /* 下記参照 */ iota ( W && value ) ;
(C++20以降)
template < class W, class Bound >

requires /* 下記参照 */

constexpr /* 下記参照 */ iota ( W && value, Bound && bound ) ;
(C++20以降)
1) 初期値から繰り返しインクリメントして要素のシーケンスを生成するレンジファクトリ。境界あり(有界)または境界なし(無限)のいずれかを指定可能。
2) views :: iota ( e ) および views :: iota ( e, f ) は、任意の適切な部分式 e および f に対して、それぞれ iota_view < std:: decay_t < decltype ( ( e ) ) >> ( e ) および iota_view ( e, f ) 式等価 です。

目次

翻訳の注意点: - 「Contents」を「目次」に翻訳 - C++専門用語(Customization point objects、Data members、Member functionsなど)は原文のまま保持 - HTMLタグ、属性、 内のstd::ranges::view_interfaceは一切翻訳せず保持 - 数値、記号、フォーマットは完全に維持 - 技術文書としての正確性と専門性を確保

カスタマイゼーションポイントオブジェクト

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)
範囲を開始値からの連続的な増分で埋める
(関数テンプレート)
範囲を開始値からの連続的な増分で埋める
(アルゴリズム関数オブジェクト)
同じ値を繰り返し生成して作成されるシーケンスからなる view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト)
適応されたシーケンスの各要素を、要素の位置と値の両方を含むタプルにマッピングする view
(クラステンプレート) (レンジアダプタオブジェクト)