Categorie di iteratori: input, forward, bidirectional, random
Distingua le categorie di iteratori e scelga gli algoritmi adatti
Categorie di iteratori: input, forward, bidirectional, random è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
Che cos'è un iteratore
Un iteratore è un puntatore generalizzato. Gli algoritmi operano tramite iteratori, rimanendo indipendenti dal contenitore sottostante.
Le cinque categorie di iteratori
Gli iteratori sono classificati in base alle capacità:
- Input — sola lettura, una sola passata
- Output — sola scrittura, una sola passata
- Forward — lettura/scrittura, più passate
- Bidirectional — possono avanzare e arretrare
- Random Access — possono saltare di un offset intero
Iteratori di input
Leggono una volta, avanzano e ripetono. Non possono tornare indietro. Esempio: std::istream_iterator.
std::istream_iterator<int> in(std::cin), end;
while (in != end) {
std::cout << *in << " ";
++in;
}Iteratori di output
Consentono solo la scrittura. Esempi: std::ostream_iterator e std::back_inserter.
std::ostream_iterator<int> out(std::cout, " ");
std::vector<int> v = {1, 2, 3};
std::copy(v.begin(), v.end(), out);Iteratori forward
Come gli iteratori di input, ma supportano più passate: è possibile ripetere l'iterazione dalla stessa posizione. Esempio: std::forward_list.
Iteratori bidirezionali
Offrono le capacità degli iteratori forward, più --. Esempi: std::list, std::map, std::set.
std::list<int> l = {1, 2, 3};
auto it = l.end();
--it; // OK, points to last elementIteratori ad accesso casuale
Offrono le capacità degli iteratori bidirezionali, più i salti: it + n, it - n, it[k], it1 - it2. Esempi: std::vector, std::deque, array raw.
Requisiti degli algoritmi
Ogni algoritmo specifica la categoria minima di iteratore necessaria. std::sort richiede l'accesso casuale; std::find richiede solo un iteratore di input.
Traits degli iteratori
std::iterator_traits<Iter> espone a tempo di compilazione il tipo di valore dell'iteratore, la categoria e altre proprietà.
using Category = std::iterator_traits<It>::iterator_category;
using Value = std::iterator_traits<It>::value_type;std::advance e std::distance
Spostano un iteratore o misurano una distanza in modo generico. Usano la categoria per scegliere l'implementazione più efficiente.
auto it = v.begin();
std::advance(it, 5); // efficient on random access, O(n) otherwise
auto d = std::distance(v.begin(), it);Iteratori personalizzati
Per scriverne uno, definisca gli alias di tipo e le operazioni richieste dalla categoria di destinazione: operator*, operator++, operator== e così via.
Concept degli iteratori in C++20
C++20 ha aggiunto concept formali come std::input_iterator, std::forward_iterator e std::random_access_iterator. Sostituiscono il precedente sistema basato sui tag.
Verifica rapida
Quale categoria di iteratore supporta l'espressione it + n in tempo costante?
Riepilogo
Gli iteratori sono classificati in base alle capacità: input, output, forward, bidirezionale e ad accesso casuale. Gli algoritmi richiedono una categoria minima. Gli iteratori di vector consentono l'accesso casuale; quelli di list e map sono bidirezionali.
Domande Frequenti
La lezione «Categorie di iteratori: input, forward, bidirectional, random» è gratuita?
Sì — il testo completo di «Categorie di iteratori: input, forward, bidirectional, random» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «Categorie di iteratori: input, forward, bidirectional, random»?
Distingua le categorie di iteratori e scelga gli algoritmi adatti Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Categorie di iteratori: input, forward, bidirectional, random»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Categorie di iteratori: input, forward, bidirectional, random
- Pattern comuni per gli iteratori: begin, end, advance
- Introduzione alla libreria Ranges di C++20
- Adattatori di intervalli: views::filter, transform, take