Traduzioni di questa pagina?:

C++ Iterators

Gli iteratori sono usati per accedere i membri di una classe container e possono essere usati in modo simile ai puntatori. Per esempio si può usare un iteratore per passare da un elemento ad un altro di un vettore. Ci sono diversi tipi di iteratori:

IteratorDescription
input_iteratorLegge valori muovendosi in avanti. Questo può essere incrementato, confrontato e 'dereferenced'.
output_iteratorScrive valori con movimento in avanti. Possono essere incrementati e 'dereferenced'
forward_iteratorLegge o scrive valori con movimento in avanti. Questo combina le funzionalità degli iteratori di input e output con l'abilità di immagazzinare il valore degli iteratori.
bidirectional_iteratorValori sia in lettura che scrittura con movimento bidirezionale. Come i forward_iterator, ma possono essere sia incrementati che decrementati.
random_iteratorAccesso random in lettura e scrittura. Sono gli iteratori più potenti e combinano le funzionalità degli iteratori bidirezionali con l'abilità di fare pointer arithmetic e confronto tra puntatori.
reverse_iterator Sia un random_iterator o un bidirectional_iterator che si muove in direzione retrograda.

Ognuna delle classi container è associata ad un tipo di iteratore e ognuno degli algoritmi della STL usa un certo tipo di iteratore.

Per esempio, i vettori sono associati con iteratori ad accesso random (random_iterator). Questo significa che possono usare algoritmi che richiedono l'accesso random. Dato che questi iteratori coprono tutte le caratteristiche degli altri iteratori, i vettori possono usare algoritmi progettati per altri iteratori.

Il codice che segue crea e usa un iteratore con un vettore:

    vector<int> the_vector;
    vector<int>::iterator the_iterator;
 
    for( int i=0; i < 10; i++ ) the_vector.push_back(i);
    int total = 0;
    the_iterator = the_vector.begin();
    while( the_iterator != the_vector.end() ) {
      total += *the_iterator;
      ++the_iterator;
    }
 
    cout << "Total=" << total << endl;

Notate che potete accedere agli elementi di un container attraverso il dereferencing dell'iteratore.

Argomenti correlati: http://www.oreillynet.com/pub/a/network/2005/10/18/what-is-iterator-in-c-plus-plus.html