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 :
- Parcourir un conteneur
- Lire ou modifier des éléments
- Interagir avec les algorithmes de la STL (sort, find, count…)
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 :
- Input Iterator – lecture seule
- Output Iterator – écriture seule
- Forward Iterator – déplacement vers l’avant
- Bidirectional Iterator – avant + arrière
- Random Access Iterator – accès aléatoire, comme un pointeur
Exemples : vector → random access iterator list → bidirectional iterator map/set → bidirectional iterator
3) begin() et end()
Tous les conteneurs STL fournissent deux fonctions essentielles :
- begin() → pointe sur le premier élément
- end() → pointe sur la position après le dernier élément
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
- Indépendance vis-à-vis du type de conteneur
- Code clair et lisible
- Compatibilité totale avec les algorithmes STL
- Accès mémoire efficace
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
Aperçu de la bibliothèque standard C++
Découvrez la bibliothèque standard C++, les conteneurs STL, les algorithmes et les composants essentiels du développement moderne.
Boucles en C++ : for, while, do-while
Apprenez les boucles en C++ avec for, while et do-while pour répéter des opérations et contrôler le flux du programme.
Éléments uniques avec std::set et std::multiset en C++
Apprenez à utiliser std::set et std::multiset en C++ pour gérer des éléments uniques et des collections ordonnées.
La bibliothèque algorithm de C++ : sort, find, count
Apprenez la bibliothèque algorithm de C++ avec sort, find, count et d’autres algorithmes STL pour traiter les données.
pair, tuple et Structured Binding en C++
Apprenez pair, tuple et le Structured Binding en C++ pour manipuler plusieurs valeurs avec un code moderne et lisible.
Structures clé-valeur avec std::map et std::unordered_map en C++
Apprenez à utiliser std::map et std::unordered_map en C++ pour gérer efficacement des structures clé-valeur.
Structures séquentielles avec std::list et std::deque en C++
Apprenez à utiliser std::list et std::deque en C++, avec leurs différences de performances et leurs cas d’utilisation.
Utilisation de std::vector en C++
Apprenez à utiliser std::vector en C++ pour gérer des tableaux dynamiques avec des exemples pratiques.