名前空間
変種
操作

名前付き要件:LegacyInputIterator

提供: cppreference.com
< cpp‎ | named req
 
 
 

LegacyInputIterator はその指す先の要素から読み込むことができる LegacyIterator です。 LegacyInputIterator はシングルパスアルゴリズムに対する有効性を保証するだけです。 LegacyInputIteratori がいったんインクリメントされると、その以前の値の全てのコピーは無効化される可能性があります。

目次

[編集]要件

以下の内容を満たす場合、型 ItLegacyInputIterator を満たします。

さらに、

が与えられたとき、以下の式が有効でなければならず、指定された効果を持たなければなりません。

戻り値同等な式注釈
i != jbool に文脈的に変換可能!(i == j)事前条件: (i, j)== の領域内である。
*ireferencevalue_type に変換可能i == j かつ (i, j)== の領域内であれば、これは *j と同等です。

事前条件: i が逆参照可能。

(void)*i, *i*i と同等です。

i->m(*i).m事前条件: i が逆参照可能。
++iIt&

事前条件: i が逆参照可能。

事後条件: i が逆参照可能または i が終端。

事後条件: i の以前の値のあらゆるコピーは逆参照可能あることも == の領域内であることももはや要求されません。

(void)i++(void)++i
*i++value_type に変換可能。 value_type x =*i;

++i;

return x;

[編集]ノート

== の領域内である」は、2つのイテレータの間で等しさの比較が定義されているという意味です。 入力イテレータの場合、等しさの比較はすべての値に対して定義されている必要はなく、 == の領域内である値の集合は時間と共に変化しても構いません。

LegacyForwardIterator でない入力イテレータに対する reference 型は、参照型である必要はありません。 入力イテレータの逆参照はプロキシオブジェクトを返したり、 (std::istreambuf_iterator の場合のように) value_type それ自身を値返ししても構いません。

コンセプト

std::iterator_traits の定義のために、以下の説明専用コンセプトが定義されます。

template<class I>

concept __LegacyInputIterator =
  __LegacyIterator<I>&& std::equality_comparable<I>&& requires(I i){
    typename std::incrementable_traits<I>::difference_type;
    typename std::readable_traits<I>::value_type;
    typename std::common_reference_t<std::iter_reference_t<I>&&,
                                     typename std::readable_traits<I>::value_type&>;
    *i++;
    typename std::common_reference_t<decltype(*i++)&&,
                                     typename std::readable_traits<I>::value_type&>;
    requires std::signed_integral<typename std::incrementable_traits<I>::difference_type>;

  };

説明専用コンセプト __LegacyIteratorLegacyIterator#Concept で説明されています。

(C++20以上)

[編集]関連項目

型が入力イテレータである、つまり、その参照先の値を読み込むことができ、前置または後置インクリメントができることを表します
(コンセプト)[edit]
close