「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ で異なるコンテナのイテレータを比較できますか?

C++ で異なるコンテナのイテレータを比較できますか?

2024 年 11 月 8 日に公開
ブラウズ:909

Can You Compare Iterators from Different Containers in C  ?

異なるコンテナのイテレータの比較: 注意事項

C では、イテレータはコレクションを走査するための強力なメカニズムを提供します。ただし、異なるコンテナのイテレータを使用する場合は、制限事項に注意することが重要です。

異なるコンテナのイテレータを比較することが合法かどうかという問題が頻繁に発生します。次の例を考えてみましょう。

std::vector foo;
std::vector bar;

std::cout 

この式は一見無害に見えるかもしれませんが、実際には未定義の動作を引き起こします。 C 11 標準によれば、反復子は同じシーケンスの要素を参照する場合にのみ比較できます。 foo と bar は 2 つの別個のベクトルであるため、それらのイテレータは比較できません。

この動作は、LWG 問題 #446 でさらに強調されています:

「任意の比較関数を直接または間接的に評価した結果、または1 つの共通範囲の部分範囲ではない 2 つの異なる範囲 r1 および r2 (...) から取得された 2 つの反復子の値を引数として持つバイナリ演算子は、特に明記されていない限り未定義です。"

この制限カスタム反復子の実装に重大な影響を及ぼします。カスタム反復子に演算子 == を実装する予定がある場合は、同じ範囲内の反復子のみを比較するようにする必要があります。

このルールに従わないと、予期しない動作が発生する可能性があり、最終的には有害です。コードの信頼性が損なわれます。したがって、異なるコンテナーの反復子を比較することは C では厳しく禁止されていることに留意することが重要です。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3