C++ 名前付き要件: LegacyInputIterator
LegacyInputIterator は、ポインタ先の要素を読み取ることができる LegacyIterator です。LegacyInputIterator は、単一パスアルゴリズムでの有効性のみを保証します。一度 LegacyInputIterator i がインクリメントされると、その以前の値のすべてのコピーは無効になる可能性があります。
目次 |
[編集] 要件
| 型 | 定義 |
X
|
入力イテレータ型 |
T
|
X の 値型(すなわち std::iterator_traits<X>::value_type) |
R
|
std::iterator_traits<X>::reference |
| 値 | 定義 |
| i, j | X または const X 型の値 |
| r | X& 型の値 |
| その他 | 定義 |
m
|
データメンバーまたはメンバー関数を可能性として示す識別子 |
X は、以下のすべての条件を満たす場合、LegacyInputIterator を満たす。
-
Xは LegacyIterator を満たす。 -
Xは EqualityComparable を満たす。 - 以下の式はwell-formedであり、指定された意味を持つ。
| 式 | 型 | セマンティクス | |||||
|---|---|---|---|---|---|---|---|
| i != j |
|
事前条件 | i と j は == の ドメイン 内にある。 | ||||
| 効果 | !(i == j) と同等。 | ||||||
| *i | T に変換可能な R |
事前条件 | i は dereferenceable である。 | ||||
| 効果 |
| ||||||
| i->m | 事前条件 | i は dereferenceable である。 | |||||
| 効果 | (*i).m と同等。 | ||||||
| ++r | X&
|
事前条件 | r は dereferenceable である。 | ||||
| 事後条件 |
| ||||||
| (void)r++ | 効果 | (void)++r と同等。 | |||||
| *r++ | T に変換可能 |
効果 | T x = *r; ++r; return x; と同等。 | ||||
[編集] 等価性ドメイン
== のドメインという用語は、通常の数学的な意味で、== を使用して比較できる値の集合を指すために使用される。この集合は時間とともに変化する可能性がある。
各アルゴリズムは、それが使用するイテレータ値の等価性ドメインに対して追加の要件を課す。これらの要件は、アルゴリズムが == および != をどのように使用するかから推測できる。
[編集] ノート
LegacyForwardIterator ではない入力イテレータ X について、 std::iterator_traits<X>::reference は参照型である必要はない。入力イテレータのデリファレンスは、プロキシオブジェクトを返すか、 std::iterator_traits<X>::value_type そのものを値で返すことがある(std::istreambuf_iterator の場合など)。
コンセプトstd::iterator_traits の定義のために、以下の exposition-only コンセプトが定義されています。
ここで、 exposition-only concept |
(C++20以降) |
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 98 | C++98 | *i++ の戻り値の型は T であることが要求されていた |
T に変換可能な任意の型でよい |
| LWG 2114 (P2167R3) |
C++98 | bool への変換可能性が弱すぎた 実装の期待を反映するために |
要件が強化された |
[編集] 関連項目
| (C++20) |
型が入力イテレータであること、すなわち、参照先の値を読み取ることができ、前置および後置インクリメントの両方が可能であることを規定する (コンセプト) |
| イテレータライブラリ | イテレータ、イテレータ特性、アダプタ、およびユーティリティ関数の定義を提供します。 |