Aller au contenu

Libstdcpp/iterator

Un livre de Wikilivres.

La librairie standard C++ : les itérateurs

[modifier | modifier le wikicode]

Les itérateurs sont une classe centrale de la librairie standard C++. Ils permettent l'écriture d'algorithmes qui travaillent sur des données sans avoir besoin de savoir comment elles sont organisées.

La librairie standard C++ propose ainsi de très nombreux algorithmes qui offrent des services de tri, de recherche ... Ces algorithmes sont définis de manière générique : ils offrent leurs services sur tous les types de données. Mais en utilisant les itérateurs dans leur interface, ils sont aussi complètement indépendants de la manière dont ces données sont organisées.

La librairie standard C++ propose aussi de très nombreuses manières d'organiser des données : tableaux, listes ... Ces structures de données sont aussi définies de manière générique : elles peuvent contenir n'importe quel type de données. Mais surtout, l'accès aux données qu'elles contiennentse fait au travers d'itérateurs.

Ces itérateurs forment donc le lien, générique, entre les algorithmes et les structures de données. Ils proposent deux fonctionnalités principales : un moyen d'accéder aux données et un moyen de parcourir l'ensemble des données.

Accéder à chaque donnée

[modifier | modifier le wikicode]

Les itérateurs proposent d'accéder aux données en utilisant une syntaxe similaire à celle utilisée pour les pointeurs C et C++.

On peut ainsi déréférencer un itérateur avec l'opérateur operator*

*it = ...;
... = *it;

Dans le cas d'un itérateur sur un type structuré, on peut utiliser l'opérateur flèche operator->.

it->m = ...;
... = it->m;

Parcourir l'ensemble des données

[modifier | modifier le wikicode]

Afin de parcourir l'ensemble des données à traiter, l'itérateur peut proposer plusieurs moyens. La possibilité d'utiliser l'un ou l'autre de ces moyens dépend des capacités de ce itérateur et de l'organisation des données. En effet, il n'est pas possible de parcourir de la même manière un ensemble de données contigües ou un ensemble de données chaînées.

Pour un parcours simple, on utilisera les opérateurs d'incrément.

++it;
it++;

Si l'itérateur le permet, on pourra utiliser de manière similaire les opérateurs de décrément.

--it;
it--;

Enfin, certains itérateurs proposent un accès aléatoire à l'aide des opérateurs d'addition et de soustraction, comme en arithmétique des pointeurs.

it += 5;
it2 = it - 2;