Schémas courants d’itération : begin, end, advance
Utiliser efficacement std::begin, std::end, std::advance et les itérateurs inverses
Schémas courants d’itération : begin, end, advance est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
begin() et end()
Chaque conteneur standard expose begin() (premier élément) et end() (un élément après le dernier). La plage semi-ouverte [begin, end) est la manière canonique de parcourir.
std::vector<int> v = {1, 2, 3};
for (auto it = v.begin(); it != v.end(); ++it) {
std::cout << *it << " ";
}std::begin et std::end
Fonctions libres de <iterator> qui fonctionnent avec n’importe quel conteneur — y compris les tableaux C.
int arr[] = {1, 2, 3, 4};
for (auto it = std::begin(arr); it != std::end(arr); ++it) {
std::cout << *it << " ";
}cbegin et cend
Les versions c renvoient const_iterator. Utilisez-les lorsque vous n’avez pas besoin de modifier les éléments et que vous souhaitez que le compilateur l’impose.
rbegin et rend
Itérateurs inverses. rbegin() pointe vers le dernier élément, rend() vers la position précédant le premier.
for (auto it = v.rbegin(); it != v.rend(); ++it) {
std::cout << *it << " ";
}std::next et std::prev
Renvoient un itérateur décalé par rapport à un autre, sans modifier l’original.
auto it = v.begin();
auto next3 = std::next(it, 3); // it + 3
auto prev1 = std::prev(it); // it - 1std::advance
Modifie un itérateur sur place d’une distance donnée. Sélectionne la meilleure implémentation selon la catégorie.
auto it = v.begin();
std::advance(it, 5); // moves it forward by 5std::distance
Mesure le nombre d’étapes entre deux itérateurs. O(1) pour un accès aléatoire, O(n) sinon.
auto d = std::distance(v.begin(), it); // index of itItérateurs d’insertion
Adaptateurs qui transforment une affectation en insertion :
std::back_inserter— push_backstd::front_inserter— push_frontstd::inserter— insertion à une position
std::vector<int> dst;
std::copy(src.begin(), src.end(), std::back_inserter(dst));Itérateurs de flux
Utilisez les flux comme des plages avec std::istream_iterator et std::ostream_iterator.
// Read all ints from cin, print to cout
std::copy(
std::istream_iterator<int>(std::cin),
std::istream_iterator<int>{},
std::ostream_iterator<int>(std::cout, " ")
);Supprimer pendant l’itération
erase renvoie l’itérateur valide suivant. Capturez-le et réutilisez-le.
for (auto it = v.begin(); it != v.end(); ) {
if (*it < 0) it = v.erase(it);
else ++it;
}Invalidation des itérateurs
La modification d’un conteneur peut invalider ses itérateurs. Les vector sont invalidés lors d’un redimensionnement ; les list conservent des itérateurs stables, sauf ceux correspondant aux éléments supprimés.
Vérification rapide
Quelle fonction renvoie un itérateur pointant vers la position après le dernier élément d’un conteneur ?
Récapitulatif
Utilisez begin()/end() pour un parcours vers l’avant et rbegin()/rend() pour un parcours vers l’arrière. std::next, std::prev, std::advance et std::distance fonctionnent de manière générique. Les itérateurs d’insertion adaptent une affectation en insertion.
Questions Fréquemment Posées
La leçon « Schémas courants d’itération : begin, end, advance » est-elle gratuite ?
Oui — le texte complet de « Schémas courants d’itération : begin, end, advance » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Schémas courants d’itération : begin, end, advance » ?
Utiliser efficacement std::begin, std::end, std::advance et les itérateurs inverses Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Schémas courants d’itération : begin, end, advance » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Catégories d’itérateurs : input, forward, bidirectional, random
- Schémas courants d’itération : begin, end, advance
- Introduction à la bibliothèque Ranges de C++20
- Adaptateurs de plages : views::filter, views::transform, views::take