名前付き要件: LegacyForwardIterator - cppreference.com
提供: cppreference.com
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型の逆参照可能なイテレータistd::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 の定義のために、以下の説明専用コンセプトが定義されます。 <tbody> </tbody>
説明専用コンセプト |
(C++20以上) |