0Pricing
C++ Academy · Leçon

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 - 1

std::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 5

std::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 it

Itérateurs d’insertion

Adaptateurs qui transforment une affectation en insertion :

  • std::back_inserter — push_back
  • std::front_inserter — push_front
  • std::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

  1. Catégories d’itérateurs : input, forward, bidirectional, random
  2. Schémas courants d’itération : begin, end, advance
  3. Introduction à la bibliothèque Ranges de C++20
  4. Adaptateurs de plages : views::filter, views::transform, views::take
← Retour à C++ Academy