Maison > développement back-end > C++ > La comparaison des itérateurs de différents conteneurs a-t-elle un comportement défini en C ?

La comparaison des itérateurs de différents conteneurs a-t-elle un comportement défini en C ?

Linda Hamilton
Libérer: 2024-11-03 06:03:30
original
751 Les gens l'ont consulté

Is Comparing Iterators from Different Containers in C   Defined Behavior?

Comparaison des itérateurs de différents conteneurs en C

Dans le contexte de l'implémentation d'itérateurs personnalisés, une question fondamentale se pose : est-il permis de comparer des itérateurs à partir de conteneurs distincts ? Prenez, par exemple, l'extrait de code suivant :

<code class="cpp">std::vector<int> foo;
std::vector<int> bar;

// Is this expression valid?
foo.begin() == bar.begin();</code>
Copier après la connexion

Selon la norme C 11 :

Itérateurs dans la même séquence :

  • Les itérateurs sont considérés comme accessibles les uns aux autres si des applications répétées de l'opérateur d'incrémentation ( ) aboutissent à l'égalité.
  • Les itérateurs font référence à des éléments de la même séquence s'ils sont accessibles les uns aux autres.

Comparaison des itérateurs de différents conteneurs :

  • Pour les itérateurs directs, la comparaison des itérateurs n'est définie que s'ils appartiennent à la même séquence sous-jacente.

Par conséquent, comparer des itérateurs de différents conteneurs, tels que foo.begin() et bar.begin() dans l'exemple ci-dessus, est considéré comme un comportement non défini.

Ce comportement non défini découle du fait que les itérateurs font référence à des éléments spécifiques dans un conteneur. Lorsque les itérateurs appartiennent à des conteneurs différents, on ne peut pas supposer qu'ils pointent vers des éléments dans la même séquence sous-jacente, leur comparaison donne donc des résultats indéfinis.

LWG Issue #446 :

Pour clarifier ce problème, le numéro 446 du LWG a proposé d'ajouter le texte suivant à la norme :

Le résultat de l'évaluation directe ou indirecte d'une fonction de comparaison ou de l'opérateur binaire - avec deux valeurs d'itérateur comme arguments obtenus à partir de deux plages différentes... n'est pas défini, sauf indication contraire explicite.

Cet ajout souligne encore la nature indéfinie de la comparaison d'itérateurs de conteneurs distincts.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal