名前空間
変種
操作

名前付き要件: LegacyInputIterator

提供: cppreference.com
< cpp‎ | named req
 
 
名前付き要件
基本
型の性質
ライブラリ全体
コンテナ
コンテナの要素
イテレータ
ストリーム入出力
乱数
並行処理
(C++11)

(C++11)
(C++11)
その他
 

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

目次

[編集] 要件

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

さらに、

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

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

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

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

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

事前条件: 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]