Sobes.tech
Junior

Qu'est-ce qu'un itérateur dans la bibliothèque standard de modèles (STL) ?

sobes.tech IA

Réponse de l'IA

L’itérateur dans la STL est un concept généralisé qui fournit un moyen d’accéder aux éléments d’un conteneur (par exemple, vector, list, map) de manière séquentielle, sans révéler la structure interne de ce conteneur. Il ressemble à un pointeur vers un élément, mais avec des capacités supplémentaires selon la catégorie de l’itérateur.

Fonctions principales de l’itérateur :

  • Accéder à l’élément courant (*it).
  • Se déplacer vers l’élément suivant (++it).
  • Comparer avec un autre itérateur (par exemple, pour déterminer la fin de la séquence it != end()).

Catégories d’itérateurs (par ordre d’expansion des capacités) :

  1. Input Iterator : Peut lire les éléments une seule fois (par exemple, entrée depuis un flux). Supporte *it (pour lecture), ++it, it == autre.
  2. Output Iterator : Peut écrire les éléments une seule fois (par exemple, sortie vers un flux). Supporte *it (pour écriture), ++it.
  3. Forward Iterator : Peut lire et écrire des éléments plusieurs fois et ne peut avancer que vers l’avant. Supporte *it (lecture/écriture), ++it, it == autre.
  4. Bidirectional Iterator : Peut se déplacer vers l’avant et vers l’arrière. Supporte toutes les opérations de Forward Iterator, plus --it.
  5. Random Access Iterator : Peut se déplacer d’un nombre arbitraire d’éléments en un seul pas (comme des pointeurs). Supporte toutes les opérations de Bidirectional Iterator, plus :
    • it + n, it - n (déplacement de n éléments)
    • it += n, it -= n
    • it[n] (accès à l’élément avec décalage n)
    • it < autre, <=, >, >= (comparaison de positions)

Exemple d’utilisation :

#include <vector>
#include <iostream>

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};

    // Obtenir un itérateur au début du conteneur
    std::vector<int>::iterator it = v.begin();

    // Parcourir les éléments avec l’itérateur
    while (it != v.end()) {
        std::cout << *it << " "; // Désérialisation de l’itérateur pour accéder à la valeur
        ++it; // Passer à l’élément suivant
    }
    std::cout << std::endl; // Affichage : 1 2 3 4 5

    return 0;
}

Les itérateurs offrent une abstraction sur le type spécifique du conteneur, permettant aux algorithmes STL de fonctionner de manière uniforme avec différents types de données.