名前付き要件: LegacyForwardIterator
LegacyForwardIterator はその指す先の要素からデータを読み込むことができる LegacyIterator です。
LegacyInputIterator や LegacyOutputIterator と異なり、マルチパスアルゴリズムで使用することができます。
目次 |
[編集] 要件
以下の内容を満たす場合、型 It は LegacyForwardIterator を満たします。
- 型
Itが LegacyInputIterator を満たす。 - 型
Itが DefaultConstructible を満たす。 -
It型のオブジェクトが後述のマルチパス保証を提供する。 - 型
std::iterator_traits<It>::referenceが、
-
Itが LegacyOutputIterator を満たすならば (Itが可変ならば)T&であり、 - そうでなければ ((
Itが定数であれば)const T&である。
-
- (ただし
Tは std::iterator_traits<It>::value_type によって表される型です)
- 等しいおよび等しくないの比較は同じベースとなるシーケンスに対するすべてのイテレータおよび値初期化されたイテレータ (C++14以上)に渡って定義されます。
さらに、
-
It型の逆参照可能なイテレータi -
std::iterator_traits<It>::referenceによって表される型reference
が与えられたとき、以下の式が有効でなければならず、指定された効果を持たなければなりません。
| 式 | 戻り値の型 | 同等な式 | 注釈 |
|---|---|---|---|
| i++ | It | It ip=i; ++i; return ip; | |
| *i++ | reference |
可変な LegacyForwardIterator は LegacyOutputIterator の要件を追加で満たす LegacyForwardIterator です。
[編集] マルチパス保証
It 型の逆参照可能なイテレータ a, b が与えられたとき、
-
aとbが等しい (a == bが文脈的にtrueに変換できる) 場合、それらがどちらも逆参照可能でないか、*aと*bが同じオブジェクトに束縛される参照であるかの、いずれかです。 -
*aと*bが同じオブジェクトを参照している場合は、a==bです。 - 可変な
ForwardIteratorイテレータを通した代入はイテレータを無効化しません (referenceが真の参照として定義されることによる暗黙の事柄です)。 -
aのコピーをインクリメントしてもaから読み込まれる値は変わりません (形式的には、Itが生のポインタ型であるか、式 (void)++It(a), *a が式 *a と同等であるかの、いずれかです)。 -
a == bであれば++a == ++bが暗黙に成り立ちます。
単数イテレータ値初期化された LegacyForwardIterator は何らかの未規定な空のコンテナの終端イテレータであるかのように動作します。 同じ型の値初期化されたすべての LegacyForwardIterator は等しく比較されます。 |
(C++14以上) |
コンセプトstd::iterator_traits の定義のために、以下の説明専用コンセプトが定義されます。
説明専用コンセプト |
(C++20以上) |
[編集] 関連項目
InputIterator が等しさの比較とマルチパスをサポートする前進イテレータであることを指定します (コンセプト) |

