Vergleich von Iteratoren aus verschiedenen Containern
Bei der Arbeit mit Containern ist es wichtig, die Auswirkungen des Vergleichs von Iteratoren aus verschiedenen Containern zu verstehen. Es stellt sich die Frage: Ist es zulässig, Iteratoren zu vergleichen, die zu unterschiedlichen Containern gehören?
Bedenken Sie den folgenden Code:
<code class="cpp">std::vector<int> foo; std::vector<int> bar; std::cout << (foo.begin() == bar.begin());</code>
Wird der Ausdruck foo.begin() == bar.begin() ergibt falsch oder führt zu undefiniertem Verhalten?
Eine genauere Betrachtung des C 11-Standards (n3337) kann Licht in dieses Dilemma bringen:
Iteratoren innerhalb derselben Sequenz
Vergleich von Iteratoren aus verschiedenen Containern
Angesichts dieser Anforderungen ist der Vergleich von Iteratoren aus verschiedenen Containern ein undefiniertes Verhalten.
LWG Issue #446
LWG Issue #446 geht explizit auf diese Frage ein und schlägt folgende Ergänzung zum Standard vor:
„Das Ergebnis von direkt oder Die indirekte Auswertung einer Vergleichsfunktion oder des Binäroperators mit zwei Iteratorwerten als Argumenten, die aus zwei verschiedenen Bereichen r1 und r2 erhalten wurden [...], die keine Unterbereiche eines gemeinsamen Bereichs sind, ist undefiniert, sofern nicht ausdrücklich anders beschrieben >Zusammenfassend lässt sich sagen, dass der Vergleich von Iteratoren aus unterschiedlichen Containern ein undefiniertes Verhalten ist, und es ist wichtig, diese Einschränkung einzuhalten, wenn Sie benutzerdefinierte Iteratoren schreiben und Container in Ihrem Code bearbeiten.
Das obige ist der detaillierte Inhalt vonIst es gültig, Iteratoren aus verschiedenen Containern in C zu vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!