Itérateurs
Les itérateurs en C++ permettent de traverser les élément d’un conteneur pour, par exemple :
- les modifier ;
- les afficher ;
- créer un autre conteneur.
Théorie
Créer un itérateur
Les types qui sont compatibles avec des itérateurs proposent des fonctions membre :
begin– renvoie un forward iterator (un iterateur qui va du début à la fin)cbegin– forward iterator constant (on ne peut pas modifier les éléments à travers cet itérateur)rbegin– reverse iterator (de la fin jusqu’au début)crbegin– reverse iterator
Soit T un type de conteneur (comme std::string ou std::vector) :
T container
T::iterator iter1{container.begin()};
auto iter2{container.begin()};
Consulter la valeur
Pour consulter la valeur derrière un itérateur, il suffit d’utiliser l’opérateur de déréférence *.
std::cout << *iter << "\n";
Faire avancer un itérateur
On peut faire avancer un itérateur de différentes façons.
iter++;
iter += 1;
iter += 5;
std::advance(iter, 1);
La fin d’une itération
On sait quand on ne peut plus se servir d’un itérateur quand il est égal au retour de la fonction end associée à la fonction begin que l’on a utilisé.
T container;
auto iter{container.cbegin()};
while (iter != container.cend()) {
iter += 1;
}
Les paires sont :
begin,endforwardcbegin,cendconst forwardrbegin,rendreversecrbegin,crendconst reverse
Exemples
std::string
Exemple d’utilisation sur une std::string.
std::string str{"hello"};
auto iter{str.begin()};
while (iter != str.end()) {
if (*iter == 'e') {
*iter = 'a';
}
iter++;
}
std::cout << str << "\n";