名前付き要件: LegacyInputIterator
LegacyInputIterator はその指す先の要素から読み込むことができる LegacyIterator です。 LegacyInputIterator はシングルパスアルゴリズムに対する有効性を保証するだけです。 LegacyInputIterator i がいったんインクリメントされると、その以前の値の全てのコピーは無効化される可能性があります。
目次 |
[編集] 要件
以下の内容を満たす場合、型 It
は LegacyInputIterator を満たします。
- 型
It
が LegacyIterator を満たす。 - 型
It
が EqualityComparable を満たす。
さらに、
- It または const It 型の値
i
,j
- std::iterator_traits<It>::reference によって表される型
reference
- std::iterator_traits<It>::value_type によって表される型
value_type
が与えられたとき、以下の式が有効でなければならず、指定された効果を持たなければなりません。
式 | 戻り値 | 同等な式 | 注釈 |
---|---|---|---|
i != j | bool に文脈的に変換可能 | !(i == j) | 事前条件: (i, j) が == の領域内である。 |
*i | reference、value_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; |
[編集] ノート
「==
の領域内である」は、2つのイテレータの間で等しさの比較が定義されているという意味です。 入力イテレータの場合、等しさの比較はすべての値に対して定義されている必要はなく、 ==
の領域内である値の集合は時間と共に変化しても構いません。
LegacyForwardIterator でない入力イテレータに対する reference 型は、参照型である必要はありません。 入力イテレータの逆参照はプロキシオブジェクトを返したり、 (std::istreambuf_iterator の場合のように) value_type それ自身を値返ししても構いません。
コンセプトstd::iterator_traits の定義のために、以下の説明専用コンセプトが定義されます。
説明専用コンセプト |
(C++20以上) |
[編集] 関連項目
型が入力イテレータである、つまり、その参照先の値を読み込むことができ、前置または後置インクリメントができることを表します (コンセプト) |