名前付き要件: 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 が等しさの比較とマルチパスをサポートする前進イテレータであることを指定します (コンセプト) |