0Pricing
C++ Academy · Lezione

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 element

Iteratori 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

  1. Categorie di iteratori: input, forward, bidirectional, random
  2. Pattern comuni per gli iteratori: begin, end, advance
  3. Introduzione alla libreria Ranges di C++20
  4. Adattatori di intervalli: views::filter, transform, take
← Torna a C++ Academy