Maison  >  Article  >  développement back-end  >  Les itérateurs de différents conteneurs peuvent-ils être comparés en C ?

Les itérateurs de différents conteneurs peuvent-ils être comparés en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-01 14:35:29536parcourir

Can Iterators from Different Containers be Compared in C  ?

Comparaison des itérateurs de différents conteneurs

En C , il est important de comprendre les principes régissant la comparaison des itérateurs lorsqu'il s'agit de différents conteneurs. La question se pose : "Est-il acceptable de comparer des itérateurs de conteneurs distincts ?"

Pour y répondre, on se réfère à la norme C 11 (n3337) :

  • Général Exigences de l'itérateur : Un itérateur j est accessible à partir d'un itérateur i uniquement si l'application de i un nombre fini de fois donne i == j. Les itérateurs accessibles font référence à des éléments de la même séquence.
  • Itérateurs avant et égalité : Le domaine de l'opérateur d'égalité (==) pour les itérateurs avant est limité aux itérateurs provenant du même séquence sous-jacente.

Étant donné que RandomAccessIterator hérite des exigences de ForwardIterator, il s'ensuit que comparer des itérateurs de différents conteneurs est un comportement non défini.

Le numéro LWG n° 446 aborde spécifiquement ce problème et propose l'amendement 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 r1 et r2 n'est pas défini, sauf si explicitement décrit autrement."

Cet amendement souligne que comparer des itérateurs de différents conteneurs, à moins qu'ils ne soient des sous-plages d'une plage commune, est un comportement indéfini.

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!

Déclaration:
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