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)
  • cbeginforward iterator constant (on ne peut pas modifier les éléments à travers cet itérateur)
  • rbeginreverse iterator (de la fin jusqu’au début)
  • crbeginreverse 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, end forward
  • cbegin, cend const forward
  • rbegin, rend reverse
  • crbegin, crend const 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";