Catégories d’itérateurs : input, forward, bidirectional, random
Distinguer les catégories d’itérateurs et choisir les algorithmes qui leur correspondent
Catégories d’itérateurs : input, forward, bidirectional, random est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.
Qu’est-ce qu’un itérateur
Un itérateur est un pointeur généralisé. Les algorithmes fonctionnent via des itérateurs, ce qui les découple du conteneur sous-jacent.
Cinq catégories d’itérateurs
Les itérateurs sont classés selon leurs capacités :
- Entrée — lecture seule, parcours unique
- Sortie — écriture seule, parcours unique
- À parcours direct — lecture/écriture, plusieurs parcours
- Bidirectionnel — peut avancer et reculer
- À accès aléatoire — peut sauter d’un décalage entier
Itérateurs d’entrée
Lisez une fois, avancez, recommencez. Impossible de revenir en arrière. Exemple : std::istream_iterator.
std::istream_iterator<int> in(std::cin), end;
while (in != end) {
std::cout << *in << " ";
++in;
}Itérateurs de sortie
Écriture uniquement. Exemples : std::ostream_iterator et std::back_inserter.
std::ostream_iterator<int> out(std::cout, " ");
std::vector<int> v = {1, 2, 3};
std::copy(v.begin(), v.end(), out);Itérateurs à parcours direct
Comme les itérateurs d’entrée, mais avec plusieurs parcours — vous pouvez recommencer l’itération depuis la même position. Exemple : std::forward_list.
Itérateurs bidirectionnels
Itérateurs à parcours direct, avec en plus --. Exemples : std::list, std::map, std::set.
std::list<int> l = {1, 2, 3};
auto it = l.end();
--it; // OK, points to last elementItérateurs à accès aléatoire
Itérateurs bidirectionnels avec sauts : it + n, it - n, it[k], it1 - it2. Exemples : std::vector, std::deque, tableaux bruts.
Exigences des algorithmes
Chaque algorithme spécifie la catégorie minimale d’itérateur dont il a besoin. std::sort nécessite un accès aléatoire ; std::find nécessite seulement une entrée.
Caractéristiques des itérateurs
std::iterator_traits<Iter> expose à la compilation le type de valeur de l’itérateur, sa catégorie et ses autres propriétés.
using Category = std::iterator_traits<It>::iterator_category;
using Value = std::iterator_traits<It>::value_type;std::advance et std::distance
Déplacez un itérateur ou mesurez une distance de manière générique. Ces fonctions utilisent la catégorie pour choisir l’implémentation la plus efficace.
auto it = v.begin();
std::advance(it, 5); // efficient on random access, O(n) otherwise
auto d = std::distance(v.begin(), it);Itérateurs personnalisés
Pour écrire le vôtre, définissez les alias de types et les opérations requis pour la catégorie visée — operator*, operator++, operator==, etc.
Concepts d’itérateurs en C++20
C++20 a ajouté des concepts formels tels que std::input_iterator, std::forward_iterator et std::random_access_iterator. Ils remplacent l’ancien système fondé sur des balises.
Vérification rapide
Quelle catégorie d’itérateur prend en charge l’expression it + n en temps constant ?
Récapitulatif
Les itérateurs sont classés selon leurs capacités — entrée, sortie, parcours direct, bidirectionnel, accès aléatoire. Les algorithmes exigent une catégorie minimale. Les itérateurs de vector ont un accès aléatoire ; ceux de list et map sont bidirectionnels.
Questions Fréquemment Posées
La leçon « Catégories d’itérateurs : input, forward, bidirectional, random » est-elle gratuite ?
Oui — le texte complet de « Catégories d’itérateurs : input, forward, bidirectional, random » 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 « Catégories d’itérateurs : input, forward, bidirectional, random » ?
Distinguer les catégories d’itérateurs et choisir les algorithmes qui leur correspondent 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 1 sur 4.
Combien de temps prend la leçon « Catégories d’itérateurs : input, forward, bidirectional, random » ?
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