入力イテレータと読み取り専用フォワードイテレータの違いは何ですか?入力イテレータと読み取り専用フォワードイテレータの違いは何ですか?
後者は読み取り専用なので、明らかに出力イテレータの要件を満たしていません。そのため、(もしあれば)追加の保証を伴うイテレータを効果的に入力します。問題は、どのような追加の保証ですか?
私が推測しているのは、順方向イテレータはマルチパスであり、入力イテレータはそうでないと思いますか?
入力イテレータと読み取り専用フォワードイテレータの違いは何ですか?入力イテレータと読み取り専用フォワードイテレータの違いは何ですか?
後者は読み取り専用なので、明らかに出力イテレータの要件を満たしていません。そのため、(もしあれば)追加の保証を伴うイテレータを効果的に入力します。問題は、どのような追加の保証ですか?
私が推測しているのは、順方向イテレータはマルチパスであり、入力イテレータはそうでないと思いますか?
はい、入力イテレータは1パスイテレータです。フォワードイテレータはマルチパスですが、一度しか反復することはできません。 §24.2.3 [input.iterators] p2 (the table)
から
++r
の、事前/事後条件カラム:
プレ:
r
はdereferenceableあります。
ポスト:r
は逆参照可能であるか、またはr
が過去端です。
投稿:以前の値r
のコピーは、参照を外すか、==
のドメインになる必要はなくなりました。
最後の事後条件はa == b
ため、++a == ++b
がtrue
である必要はないことを意味しています。
同じ節、段落3:
[注:入力イテレータの場合、は B ==は++ == ++ Bを意味するものではありません。 (等号では、代入プロパティや参照の透過性は保証されません)。入力イテレータのアルゴリズムは、同じイテレータを二度通過することは絶対にしないでください。それらはシングルパスアルゴリズムである必要があります。 [...]これらのアルゴリズムは、
istream_iterator
クラステンプレートを使用して、入力データのソースとしてistreamを使用することができます。
- 場合
§24.2.5 [forward.iterators]
P1クラスまたはポインタタイプ
X
満たす前方イテレータの要件から末端音符][...]
- オブジェクト
X
のタイプは、以下に説明するマルチパス保証を提供します。
a == b
が意味++a == ++b
とX
がポインタ型または表現である(void)++X(a), *a
等価である:P3つdereferenceableイテレータAおよびタイプ
X
のBはが場合マルチパス保証を提供します式*a
に変換します。
だから典型的な例は、ストリームイテレータ(シングルパス、入力反復子)、および単独でリンクされたリスト(マルチパスフォワード反復子)かもしれない – jalf
OH、によって、upboatを有します。 +1 – jalf