ホームページ >バックエンド開発 >C++ >異なるコンテナのイテレータを C で比較できますか?

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-01 14:35:29631ブラウズ

Can Iterators from Different Containers be Compared in C  ?

異なるコンテナーのイテレーターの比較

C では、異なるコンテナーを扱うときにイテレーターの比較を制御する原則を理解することが重要です。 「異なるコンテナの反復子を比較することは許容されますか?」

これに答えるには、C 11 標準 (n3337) を参照します。

  • 一般イテレータの要件: イテレータ j は、i を有限回適用して i == j になる場合にのみ、イテレータ i から到達可能です。到達可能な反復子は、同じシーケンスの要素を参照します。
  • 前方反復子と等価性: 前方反復子の等価演算子 (==) のドメインは、同じ基礎となるシーケンスです。

RandomAccessIterator は ForwardIterator の要件を継承するため、異なるコンテナからのイテレータの比較は未定義の動作になります。

LWG 問題 #446 は、この問題に具体的に対処し、提案しています。標準に対する次の修正:

「2 つの異なる範囲 r1 と r2 から取得された 2 つの反復子の値を引数として持つ比較関数または二項演算子を直接的または間接的に評価した結果は、明示的に指定されていない限り、未定義です。 "

この修正は、共通の範囲の部分範囲でない限り、異なるコンテナの反復子を比較することは未定義の動作であることを強調しています。

以上が異なるコンテナのイテレータを C で比較できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。