Les itérateurs sont utilisés pour accéder au contenu des classes conteneurs de la STL. Ils peuvent être utilisés comme des pointeurs. Il est par exemple possible d'utiliser un itérateur pour parcourir les éléments d'un vecteur.
Il existe plusieurs types d'itérateurs :
Iterateur | Description |
---|---|
input_iterator | Lecture de valeurs avec déplacement vers l'avant. Peuvent être incrémentés, comparés et déréférencés. |
output_iterator | Écriture de valeurs avec déplacement vers l'avant. Peuvent être incrémentés et déréférencés. |
forward_iterator | Lecture ou écriture de valeurs avec déplacement vers l'avant. Associent les fonctionnalités des input_iterator et des output_iterator. |
bidirectional_iterator | Lecture ou écriture de valeurs avec déplacement vers l'avant ou l'arrière. Offrent les même fonctionnalités que les forward_iterator en y ajoutant la possibilité de les décrémenter. |
random_iterator | Lecture et écriture avec accès aléatoire. Ce sont les plus puissants des itérateurs. Ils offrent les fonctionnalités des bidirectional_iterator avec en plus la possibilité d'effectuer de la comparaison et de l'arithmétique des pointeurs. |
reverse_iterator | Soit un bidirectional_iterator ou un random_iterator, mais qui se déplace vers l'arrière quand il est incrémenté. |
À chaque classe container de la STL est associé un type d'itérateur, et chacun des algorithmes STL utilise un type d'itérateur donné.
Par exemple, les itérateurs associés aux vecteurs sont les random_iterator. Ils peuvent ainsi être utilisés par les algorithmes qui nécessitent un accès aléatoire. Dans la mesure où les random_iterator offrent toutes les fonctionnalités des autres types d'itérateurs, les vecteurs peuvent égalemetn utiliser les algorithmes destinés à d'autres conteneurs.
Le code suivant crée et utilise un itérateur avec un vecteur :
vector<int> vecteur; vector<int>::iterator iterateur; for( int i=0; i < 10; i++ ) vecteur.push_back(i); int total = 0; iterateur = vecteur.begin(); while( iterateur != vecteur.end() ) { total += *iterateur ; ++iterateur ; } cout << "Total=" << total << endl;
Notez comment l'itérateur est déréférencé pour permettre l'accès aux éléments du conteneur.
Sujets connexes : http://www.oreillynet.com/pub/a/network/2005/10/18/what-is-iterator-in-c-plus-plus.html