Partager via


Itérateurs

Les fonctions de bibliothèque STL font une utilisation généralisée les itérateurs de négocier des différents algorithmes et les séquences sur lesquels ils se comportent.le nom d'un type d'itérateur (ou de son préfixe) indique la catégorie d'itérateurs requis pour ce type.Par ordre d'augmenter la puissance, les catégories sont présentées ici comme suit :

  • Sortie.Un itérateur X de sortie ne peut avoir qu'un seul indirect enregistré par V de valeur sur celui-ci, après quoi il doit être incrémenté avant le magasin suivante, comme dans (*X(= V), (*X = V, unX), ou (*X = V, X++).

  • entrée.un itérateur d'entrée X peut représenter une valeur singulière qui indique la fin de la séquence.Si un itérateur d'entrée ne compare pas égale à sa valeur d'END-de-séquence, il peut avoir un accès indirect par V de valeur sur un certain nombre de fois, comme dans (V = *X).Pour progresser à la valeur ou à la fin suivante de la séquence, vous incrémentez l', comme dans l'X, X++, ou (V = *X++).Une fois que vous incrémentez une copie d'un itérateur d'entrée, aucune des autres copies ne peut en toute sécurité être comparée, déréférencée, ou incrémenté après.

  • Avancée.Un itérateur en avant X peut remplacer un itérateur de sortie pour entrer ou un itérateur d'entrée pour la lecture.Vous pouvez, toutefois, lire (via V = *X) que vous venez de taper (via *X = V) via un itérateur vers l'avant.Vous pouvez également exécuter plusieurs copies d'un itérateur en avant, qui peut être déréférencé et incrémenté indépendamment.

  • bidirectionnel.Un itérateur bidirectionnel X peut remplacer un itérateur vers l'avant.Vous pouvez, toutefois, également décrémenter un itérateur bidirectionnel, comme dans --X, X--, ou (V = *X--).

  • accès aléatoire.Un itérateur d'accès aléatoire X peut remplacer un itérateur bidirectionnel.Vous pouvez également effectuer très similaire à celui arithmétique entière sur un itérateurs d'accès aléatoire que vous pouvez sur un pointeur d'objet.pour N, un objet entier, vous pouvez écrire x[N], x + N, x - N, et N + X.

Notez qu'un pointeur d'objet peut remplacer un itérateurs d'accès aléatoire ou tout autre itérateur.tous les itérateurs peuvent être assignés ou copiés.Il est supposé que sont les objets légers et est souvent passé et retourné ils par valeur, pas par référence.Notez également qu'aucune des opérations décrites précédemment ne peut lever une exception lorsqu'elle est exécutée sur un itérateur valide.

La hiérarchie des catégories d'itérateur peut se résumer en affichant trois séquences.Pour l'accès en écriture seule à une séquence, vous pouvez utiliser les de :

output iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

Les moyens de flèche droite « peuvent être remplacés par ». N'importe quel algorithme qui demande un itérateur de sortie doit fonctionner correctement avec un itérateur en avant, par exemple, mais avec pas l'inverse.

Pour l'accès en lecture seule à une séquence, vous pouvez utiliser les de :

input iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

un itérateur d'entrée est le plus faible de toutes les catégories, dans ce cas.

Enfin, pour l'accès en lecture/écriture à une séquence, vous pouvez utiliser les de :

forward iterator
   -> bidirectional iterator
   -> random-access iterator

Un pointeur d'objet peut toujours utiliser des itérateurs d'accès aléatoire, ce qui peut servir de les catégories d'itérateur s'il prend en charge l'accès en lecture/écriture approprié à la séquence qu'elle désigne.

Un itérateur Iterator autre qu'un pointeur d'objet doit également définir des types de membres requis par la spécialisation iterator_traits<Iterator>.Notez que ces demandes peuvent être satisfaites en dérivant Iterator de la classe de base publique itérateur.

Cette « algèbre » les itérateurs est un élément fondamental pratiquement à tout le reste de la bibliothèque de modèles Standard.Il est important de comprendre les promesses et les limitations de chaque catégorie d'itérateur de voir comment les itérateurs sont utilisés par les conteneurs et des algorithmes dans la bibliothèque STL.

[!REMARQUE]

Vous pouvez également utiliser pour chaque, dans pour itérer au sein de les collections STL.Pour plus d'informations, consultez Comment : Itérez au sein de la collection STL avec pour chaque.

Visual C++ offre désormais des itérateurs vérifiés et les itérateurs de débogage pour garantir à ne pas remplacer les limites de votre conteneur.Pour plus d'informations, consultez Itérateurs vérifiés et Déboguez une prise en charge des itérateurs.

Voir aussi

Référence

Modèles Standard

Sécurité des threads dans la bibliothèque C++ standard