異なるコンテナのイテレータの比較: 未定義の動作の明確化
C でイテレータを扱う場合、コンテナからのイテレータの比較の制限を理解することが重要です。異なるコンテナ。この記事では、式 foo.begin() == bar.begin() が false または未定義の動作を生成するかどうかという問題を詳しく掘り下げます。ここで、foo と bar は 2 つの別個の std::vector コンテナです。
C 11 標準 (n3337) では、異なるコンテナーの反復子を直接比較することはできません。セクション 24.2.5 では、前方反復子の等価演算子 == の定義域は、同じ基礎となるシーケンス上の反復子に対してのみ定義されると述べています。異なるコンテナは別個のシーケンスとみなされるため、それらのイテレータを比較することは未定義の動作です。
さらに、LWG 問題 #446 はこの問題に具体的に対処しています。この提案は、明示的に定義されていない限り、異なる範囲の反復子の比較が未定義であることを明確にする明示的なテキストを標準に追加することを目的としています。これは、std::find のような関数を使用するなど、異なる範囲のイテレータを間接的に比較した場合でも、未定義の動作が発生する可能性があることを強調しています。
したがって、異なるコンテナまたは異なるコンテナのサブ範囲のイテレータの比較を避けることが重要です。これを行うと、予期しない結果が生じる可能性があるため、堅牢なコードの実践では避けるべきです。
以上が異なるコンテナのイテレータを比較することは未定義の動作ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。