Comparaison des itérateurs de conteneurs distincts
Lorsque vous travaillez avec des conteneurs, il est essentiel de comprendre les implications de la comparaison des itérateurs de différents conteneurs. La question se pose : est-il permis de comparer des itérateurs appartenant à des conteneurs distincts ?
Considérez le code suivant :
<code class="cpp">std::vector<int> foo; std::vector<int> bar; std::cout << (foo.begin() == bar.begin());</code>
L'expression foo.begin() == bar.begin() donner des résultats faux ou conduire à un comportement indéfini ?
Plonger dans la norme C 11 (n3337) peut faire la lumière sur ce point dilemme :
Itérateurs dans la même séquence
Comparaison des itérateurs de différents conteneurs
Compte tenu de ces exigences, comparer des itérateurs de différents conteneurs est un comportement indéfini.
LWG Issue #446
LWG Issue #446 aborde explicitement cette question, en proposant l'ajout suivant à la norme :
"Le résultat de l'évaluation directe ou indirecte de toute comparaison fonction ou l'opérateur binaire - avec deux valeurs d'itérateur comme arguments qui ont été obtenues à partir de deux plages différentes r1 et r2 [...] qui ne sont pas des sous-plages d'une plage commune n'est pas défini, sauf indication contraire explicite. "
En conclusion, comparer des itérateurs de conteneurs distincts est un comportement indéfini, et il est crucial de respecter cette contrainte lors de l'écriture d'itérateurs personnalisés et de la manipulation de conteneurs dans votre code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!