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:
| Iterator | Description |
|---|---|
| input_iterator | Legge valori muovendosi in avanti. Questo può essere incrementato, confrontato e 'dereferenced'. |
| output_iterator | Scrive valori con movimento in avanti. Possono essere incrementati e 'dereferenced' |
| forward_iterator | Legge 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_iterator | Valori sia in lettura che scrittura con movimento bidirezionale. Come i forward_iterator, ma possono essere sia incrementati che decrementati. |
| random_iterator | Accesso 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