Heim >Backend-Entwicklung >C++ >Können Iteratoren aus verschiedenen Containern in C verglichen werden?

Können Iteratoren aus verschiedenen Containern in C verglichen werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-01 14:35:29617Durchsuche

Can Iterators from Different Containers be Compared in C  ?

Vergleich von Iteratoren aus verschiedenen Containern

In C ist es wichtig, die Prinzipien zu verstehen, die den Iteratorvergleich beim Umgang mit verschiedenen Containern regeln. Es stellt sich die Frage: „Ist es akzeptabel, Iteratoren aus unterschiedlichen Containern zu vergleichen?“

Um dies zu beantworten, verweisen wir auf den C 11-Standard (n3337):

  • Allgemeines Iteratoranforderungen: Ein Iterator j ist nur dann von einem Iterator i aus erreichbar, wenn die endliche Anwendung von i zu i == j führt. Erreichbare Iteratoren beziehen sich auf Elemente derselben Sequenz.
  • Vorwärts-Iteratoren und Gleichheit: Die Domäne des Gleichheitsoperators (==) für Vorwärts-Iteratoren ist auf Iteratoren beschränkt, die von der stammen gleiche zugrunde liegende Sequenz.

Da RandomAccessIterator die Anforderungen von ForwardIterator erbt, folgt daraus, dass der Vergleich von Iteratoren aus verschiedenen Containern ein undefiniertes Verhalten ist.

Das LWG-Problem Nr. 446 befasst sich speziell mit diesem Problem und schlägt vor die folgende Änderung des Standards:

"Das Ergebnis der direkten oder indirekten Auswertung einer Vergleichsfunktion oder des Binäroperators mit zwei Iteratorwerten als Argumenten, die aus zwei verschiedenen Bereichen r1 und r2 erhalten wurden, ist undefiniert, sofern nicht ausdrücklich angegeben anders beschrieben.“

Diese Änderung hebt hervor, dass der Vergleich von Iteratoren aus verschiedenen Containern, sofern es sich nicht um Unterbereiche eines gemeinsamen Bereichs handelt, undefiniertes Verhalten darstellt.

Das obige ist der detaillierte Inhalt vonKönnen Iteratoren aus verschiedenen Containern in C verglichen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn