C での異なるコンテナのイテレータの比較
カスタム イテレータ実装のコンテキストでは、イテレータの比較は許可されるのかという基本的な疑問が生じます。別のコンテナから?たとえば、次のコード スニペットを考えてみましょう:
<code class="cpp">std::vector<int> foo; std::vector<int> bar; // Is this expression valid? foo.begin() == bar.begin();</code>
C 11 標準による:
同じシーケンス内の反復子:
異なるコンテナからの反復子の比較:
したがって、上記の例の foo.begin() と bar.begin() など、異なるコンテナの反復子を比較することは、未定義の動作とみなされます。
この未定義の動作これは、イテレータがコンテナ内の特定の要素を参照するという事実に由来します。イテレータが異なるコンテナに属している場合、それらは同じ基礎となるシーケンス内の要素を指していると想定できません。そのため、それらの比較では未定義の結果が生じます。
LWG Issue #446:
この問題を明確にするために、LWG 問題 #446 は、次のテキストを標準に追加することを提案しました:
任意の比較関数または 2 つの反復子の値を引数として取得した二項演算子を直接的または間接的に評価した結果。 2 つの異なる範囲... は、特に明記されていない限り、未定義です。
この追加により、別個のコンテナからの反復子を比較するという未定義の性質がさらに強調されます。
以上がC での異なるコンテナーのイテレーターの比較は動作を定義していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。