名前空間
変種
操作

std::sentinel_for

From cppreference.com
 
 
イテレータライブラリ
イテレータのコンセプト
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 sentinel_for =
        std::semiregular<S> &&
        std::input_or_output_iterator<I> &&

        __WeaklyEqualityComparableWith<S, I>;
(C++20以降)

sentinel_forコンセプトは、input_or_output_iterator型と、範囲を表すsemiregular型の間の関係を指定します。露出専用コンセプト__WeaklyEqualityComparableWithは、equality_comparableで説明されています。

[編集] 意味要件

SおよびI型の値として、それぞれsおよびiがあり、[is)範囲を表すとします。sentinel_for<S, I>は、次の場合にのみモデル化されます。

  • i == sがwell-definedである。
  • もしbool(i != s)ならば、iはデリファレンス可能であり、[++is)は範囲を表します。
  • std::assignable_from<I&, S>は、モデル化されるか、または満たされないかのどちらかです。

==のドメインは時間とともに変化する可能性があります。イテレータiとセ ンチネルsが与えられ、[is)が範囲を表し、i != sである場合、iに等しい任意のイテレータをインクリメントした後も[is)が範囲を表し続けることは要求されていません(したがって、そのようなインクリメントの後でi == sがwell-definedであることが要求されなくなります)。

[編集] 注釈

センチネル型とその対応するイテレータ型は、equality_comparable_withをモデル化する必要はありません。これは、センチネル型がそれ自体と比較可能ではない可能性があり、共通の参照型を持つことが要求されないためです。

C++17以降、範囲ベースforループでセンチネル型をイテレータ型と異なるものとして使用することが許可されています。

[編集] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 3453 C++20 sentinel_forの意味要件は、ranges::advanceには緩すぎた 強化された
English 日本語 中文(简体) 中文(繁體)