Introduzione a Iterator in C ++

Attraversare i dati altamente complessi archiviati in diversi tipi di contenitori come Array, Vector, ecc. Nel minor tempo di esecuzione è possibile grazie all'Iteratore in C ++, un componente di Standard Template Library (STL). Non preoccuparti, è solo un puntatore come un oggetto ma è intelligente perché non importa quale contenitore stai usando, renderà il tuo algoritmo indipendente dal tipo di contenitore fornendo un'interfaccia comune per tutti i tipi di contenitore come un ponte tra algoritmo e contenitore. Iterator non solo riduce la complessità di un programma, ma rende i tempi di esecuzione molto più veloci.

Ad esempio, l'algoritmo sort () che ha due parametri, terminando e avviando l'iteratore eseguirà l'ordinamento indipendentemente dal tipo di contenitore che si sta utilizzando. Iterator consente l'applicazione di algoritmi generici alle strutture dati. Le strutture dati possono utilizzare un Iteratore per esporre una serie di elementi.

Operazioni che utilizzano Iterator

  • begin (): questa funzione restituirà un iteratore che punta al primo elemento del contenitore.
  • end (): questa funzione restituirà un iteratore che punta al passato l'ultimo elemento del contenitore.
  • anticipo (): questa funzione incrementa la posizione di un iteratore sull'argomento specificato.
  • next (): questa funzione restituirà il nuovo iteratore che verrà puntato dall'iteratore dopo aver incrementato le posizioni negli argomenti.
  • precedente (): questa funzione restituirà il nuovo iteratore che verrà puntato dall'iteratore dopo aver ridotto le posizioni negli argomenti.
  • inserter (): questa funzione inserirà l'elemento in qualsiasi posizione nel contenitore.

Implementazione pratica

1. Codice C ++ per implementare Iterator

Codice

#include
#include
#include
using namespace std;
int main()
(
//Declaring a Vector
std::vector v(1, 2, 3, 4, 5, 6, 7);
//Declaring Iterator
vector::iterator i;
//Function for iterating through vector elements
for(i=v.begin();i!=v.end();i++)
(
std::cout << *i <<" ";
)
return 0;
)

Produzione:

2. Codice C ++ per mostrare la funzionalità iteratore

Codice

#include
#include
#include
using namespace std;
int main()
(
//Declaring a Vector
vector v(1, 2, 3, 4, 5, 6, 7, 8);
//Declaring Iterator
vector::iterator i;
//Function
v.insert(v.begin()+1, 10);
for(i=v.begin();i!=v.end();i++) (
cout << *i <<" ";
)
return 0;
)

Produzione:

Categorie di iteratori

A partire da C ++ 17, ci sono 5 diversi tipi di iteratori che possono essere classificati in base al tipo di funzionalità come mostrato nel diagramma di flusso seguente:

  • Input Iterator (stdin) : a causa della funzionalità limitata, sono i più deboli di tutti gli iteratori con funzionalità di sola lettura e avanzamento. Non può modificare il valore del contenitore. Operatore di differenza (*), Operatore non uguale (! =), Operatore di incremento (++) e Operatore uguale (==) possono essere usati come iteratori di input. Anche per operazioni di input sequenziali.
  • Iteratore di output (stdout): Iteratore solo per la memorizzazione, iteratore di sola scrittura che viene utilizzato per modificare il valore di un contenitore. Hanno anche funzionalità molto limitate. Iteratore non può accedere all'elemento. L'operatore di assegnazione (=) e l'operatore di incremento (++) possono essere utilizzati come iteratori di output. Solo in un algoritmo a passaggio singolo.
  • Iteratore in avanti (elenco collegato singolarmente): questo Iteratore contiene le funzionalità di Iteratore di ingresso e di uscita. Può avanzare nella direzione con un passo alla volta. Per leggere e scrivere in un contenitore, è l'iteratore più preferito che supporta il riutilizzo e il salvataggio. Supporta tutti gli operatori sopra elencati.
  • Iteratore bidirezionale (elenco doppiamente collegato): come suggerisce già il nome bidirezionale, il che lo rende più forte degli iteratori di cui sopra. Supporta anche la lettura e la scrittura in un contenitore. Supporta l'operatore Decrement (-).
  • Iteratore ad accesso casuale (array): l'iteratore più forte è l'iteratore più potente in quanto può leggere, scrivere e accedere in modo casuale. Puntatore come funzionalità come l'aggiunta e la sottrazione del puntatore.

Vantaggi di Iterator in C ++

Se è necessario spostarsi da un elemento che l'iteratore sta attualmente puntando a un altro elemento che è potenzialmente a n passi dall'iteratore corrente. I primi quattro nella gerarchia impiegheranno una quantità lineare di tempo per farlo mentre un iteratore ad accesso casuale può farlo in tempo costante ed è molto più affascinante perché è lì che si risparmia tempo. È la caratteristica più importante fornita da Iterator. Alcuni altri sono menzionati di seguito

  • Efficienza del codice: se abbiamo P tipi di contenitori di dati e Q cose che vogliamo fare con loro, finiremo per scrivere algoritmi P * Q. Se anche i dati sono di tipi R diversi, potremmo finire con l'algoritmo P * Q * R. Quindi, usando gli iteratori, possiamo farlo con l'algoritmo P + Q. Abbiamo risparmiato il 90% del tempo e del lavoro. Portare l'efficienza del codice al livello successivo. Il concetto alla base dell'efficienza è che l'iteratore di input sulla sorgente e l'iteratore di output sulla sequenza target non devono necessariamente essere dello stesso tipo.
  • Elaborazione dinamica: gli iteratori hanno funzionalità dinamiche come lo scambio nello stesso contenitore, assegnabile alla copia, l'incremento, la dereferenziazione e il decremento. L'iteratore fornisce la funzionalità per rimuovere e aggiungere dinamicamente elementi al contenitore. Poiché tutti gli iteratori possono essere incrementati, gli iteratori di input possono essere confrontati e riferiti a un valore. Gli iteratori bidirezionali possono essere decrementati. L'aspetto principale è scrivere una funzione e usarla per qualsiasi contenitore.

Svantaggi di Iterator in C ++

  • Non è possibile passare da una struttura di dati a un'altra contemporaneamente in un modo complesso. In questo caso Iterator non funzionerà.
  • Se stai elaborando un elenco e hai dimenticato qualcosa e ora vuoi tornare indietro, non puoi perché gli iteratori non funzioneranno in quel modo.
  • Nel caso in cui sia necessario aggiornare la struttura durante l'attraversamento, non è possibile farlo anche a causa del modo iteratore di memorizzarne la posizione.

Conclusione

Durante l'utilizzo degli iteratori tenere sempre a mente queste due cose per rendere il codice efficiente. Passare sempre l'iteratore in una funzione anziché in contenitori. Non si devono mai restituire contenitori anziché restituire o passare iteratore. Puoi ottenere qualsiasi elemento usando un iteratore, la dereferenza e passando una coppia dell'iteratore a un algoritmo

Articoli consigliati

Questa è una guida per Iterator in C ++. Qui discutiamo le operazioni nell'iteratore, le categorie, i vantaggi e gli svantaggi con codici e output. Puoi anche consultare i nostri altri articoli correlati per saperne di più-

  1. Matrici in C ++
  2. Cos'è il C ++
  3. Funzioni di array C ++
  4. Loop in C ++
  5. Funzioni dell'array PHP | Tipi di funzioni di array in PHP

Categoria: