Chargement...

Itérateurs et leur utilisation dans la STL en C++

Apprenez les itérateurs en C++ et leur utilisation avec les conteneurs et algorithmes STL pour parcourir efficacement les données.

La bibliothèque standard C++ (STL) repose sur une abstraction puissante appelée itérateur, permettant de parcourir facilement des structures de données. Les itérateurs constituent un élément essentiel des conteneurs STL (vector, list, map, set…) et offrent un moyen uniforme de passer d’un élément à l’autre. Cet article explique les différents types d’itérateurs, leurs usages et leur relation avec les algorithmes de la STL.


1) Qu’est-ce qu’un itérateur ?

Un itérateur est un objet utilisé pour accéder aux éléments d’un conteneur. Il se comporte de manière similaire à un pointeur, mais il est entièrement abstrait par la STL.

Ses fonctions principales :

Exemple


#include <vector>
#include <iostream>
using namespace std;

int main() {
    vector<int> v = {10, 20, 30};

    vector<int>::iterator it = v.begin();

    cout << *it; // 10
}

2) Types d’itérateurs

Les conteneurs STL prennent en charge plusieurs catégories d’itérateurs :

Exemples : vector → random access iterator list → bidirectional iterator map/set → bidirectional iterator


3) begin() et end()

Tous les conteneurs STL fournissent deux fonctions essentielles :


vector<int> v = {1, 2, 3};

for (auto it = v.begin(); it != v.end(); ++it) {
    cout << *it << " ";
}

4) Itérateur constant (const_iterator)

Permet uniquement la lecture ; aucune modification n’est autorisée via ce type.


vector<int> v = {10, 20, 30};

vector<int>::const_iterator it = v.begin();

// *it = 50; // ERREUR : impossibilité de modifier via const_iterator

cout << *it;

5) Itérateurs inversés (rbegin & rend)

Les itérateurs inversés permettent de parcourir un conteneur à l’envers.


vector<int> v = {1, 2, 3};

for (auto it = v.rbegin(); it != v.rend(); ++it) {
    cout << *it << " ";
}
// Sortie : 3 2 1

6) Modifier des éléments via un itérateur


vector<int> v = {10, 20, 30};

for (auto it = v.begin(); it != v.end(); ++it) {
    *it *= 2;
}

for (int x : v)
    cout << x << " ";
// Sortie : 20 40 60

7) Itérateurs et algorithmes STL

Tous les algorithmes STL fonctionnent avec des itérateurs.

Utilisation de sort


#include <algorithm>

vector<int> v = {50, 20, 10};

sort(v.begin(), v.end());

Utilisation de find


auto it = find(v.begin(), v.end(), 20);

Utilisation de count


int c = count(v.begin(), v.end(), 10);

8) Parcourir une map ou un set


#include <map>
#include <iostream>
using namespace std;

int main() {
    map<string, int> ages = {
        {"Pierre", 25},
        {"Marie", 30},
        {"Jacques", 28}
    };

    for (auto it = ages.begin(); it != ages.end(); ++it) {
        cout << it->first << " : " << it->second << endl;
    }
}

9) Supprimer un élément via un itérateur

Un itérateur peut cibler précisément un élément à supprimer.


vector<int> v = {10, 20, 30, 40};

auto it = find(v.begin(), v.end(), 20);

if (it != v.end())
    v.erase(it);

10) Avantages de l’utilisation des itérateurs


11) TL;DR

  • Itérateur : mécanisme standard d’accès aux éléments d’un conteneur
  • begin/end → itération vers l’avant
  • rbegin/rend → itération inversée
  • const_iterator → accès en lecture seule
  • Les algorithmes STL reposent entièrement sur les itérateurs
  • Exemples testés avec Visual Studio 2022 et GCC

Articles connexes