名前空間
変種
操作

std::sized_sentinel_for, std::disable_sized_sentinel_for

From cppreference.com
 
 
イテレータライブラリ
イテレータのコンセプト
sized_sentinel_for
(C++20)

イテレータのプリミティブ
アルゴリズムのコンセプトとユーティリティ
間接呼び出し可能コンセプト
共通アルゴリズム要件
(C++20)
(C++20)
(C++20)
ユーティリティ
(C++20)
イテレータアダプタ
Rangeアクセス
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
ヘッダ <iterator> で定義
template< class S, class I >

    concept sized_sentinel_for =
        std::sentinel_for<S, I> &&
        !std::disable_sized_sentinel_for<std::remove_cv_t<S>,
                                         std::remove_cv_t<I>> &&
        requires(const I& i, const S& s) {
            { s - i } -> std::same_as<std::iter_difference_t<I>>;
            { i - s } -> std::same_as<std::iter_difference_t<I>>;

        };
(1) (C++20以降)
template< class S, class I >
    inline constexpr bool disable_sized_sentinel_for = false;
(2) (C++20以降)
1) sized_sentinel_for コンセプトは、イテレータ型 I のオブジェクトとセンチネル型 S のオブジェクトが、それらの間の距離を定数時間で計算するために減算可能であることを指定します。
2) disable_sized_sentinel_for 変数テンプレートは、減算可能であるが、実際には sized_sentinel_for をモデリングしていないイテレータとセノーティネルが、コンセプトを満たすことを防ぐために使用できます。
プログラムは、SI の両方が プログラム定義型である場合、cv 修飾されていない非配列オブジェクト型 S および I に対して disable_sized_sentinel_for を特殊化できます。このような特殊化は、定数式で使用でき、型は const bool です。

目次

[編集] セマンティック要件

I 型のイテレータを iS 型のセノーティネルを s とし、[is) が範囲を表すとします。 bool(i == s)true になるまで ++i を適用する最小回数を n とします。 ISsized_sentinel_for<S, I> をモデリングするのは、以下のすべての条件が満たされる場合のみです。

  • もし nstd::iter_difference_t<I> で表現可能ならば、 s - i は well-defined であり、 n に等しい。
  • もし -nstd::iter_difference_t<I> で表現可能ならば、 i - s は well-defined であり、 -n に等しい。

[編集] 等価性保持

標準ライブラリのコンセプトのrequiresで宣言された式は、(特に明記されていない限り)等価性保持である必要があります。

[編集] 暗黙の式バリエーション

一部の定数左辺値オペランドに対して非変更的である式を使用するrequiresは、暗黙の式バリエーションも必要とする。

[編集] 関連項目

rangeが定数時間でそのサイズを知っていることを規定する
(コンセプト) [編集]
rangeのサイズと等しい整数を返す
(カスタマイゼーションポイントオブジェクト)[編集]
English 日本語 中文(简体) 中文(繁體)