異なるコンテナーのイテレーターの比較
コンテナーを使用する場合、異なるコンテナーのイテレーターを比較することの影響を理解することが不可欠です。疑問が生じます: 異なるコンテナに属するイテレータを比較することは許されますか?
次のコードを考えてください:
<code class="cpp">std::vector<int> foo; std::vector<int> bar; std::cout << (foo.begin() == bar.begin());</code>
式 foo.begin() == bar.begin() は成立しますか? false を返すか、未定義の動作につながるか?
C 11 標準 (n3337) を詳しく調べると、次のジレンマが明らかになります:
同じシーケンス内の反復子
異なるコンテナのイテレータの比較
これらの要件を考慮すると、異なるコンテナーの反復子を比較することは未定義の動作です。
LWG Issue #446
LWG Issue #446 はこの問題に明示的に対処し、標準への次の追加を提案しています:
「直接または1 つの共通範囲の部分範囲ではない 2 つの異なる範囲 r1 および r2 [...] から取得された 2 つの反復子の値を引数として持つ比較関数または二項演算子を間接的に評価することは、特に明示的に記述されていない限り、未定義です。"
結論として、異なるコンテナからのイテレータの比較は未定義の動作であり、カスタム イテレータを作成し、コード内でコンテナを操作する場合は、この制約に従うことが重要です。
以上がC で異なるコンテナのイテレータを比較することは有効ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。