Introducere în Iterator în C ++

Traversarea datelor dvs. extrem de complexe stocate în diferite tipuri de containere, cum ar fi un Array, un Vector, etc., în cel mai mic timp de execuție, este posibilă din cauza Iteratorului în C ++, o componentă a Standard Template Library (STL). Nu vă faceți griji, este doar un indicator ca un obiect, dar este inteligent, deoarece nu contează ce container utilizați, va face algoritmul dvs. independent de tipul Container, oferind o interfață comună pentru toate tipurile de containere precum o punte între algoritm și container. Iteratorul nu numai că reduce complexitatea unui program, dar face timpul de execuție mult mai rapid.

De exemplu, algoritmul sort () care are doi parametri, terminarea și pornirea iteratorului va efectua sortarea în ordinea indiferent de tipul de container pe care îl utilizați. Iteratorul permite aplicarea algoritmilor generici la structurile de date. Structurile de date pot folosi un Iterator pentru a expune o serie de elemente.

Operațiuni folosind Iterator

  • begin (): Această funcție va returna un iterator îndreptându-se către primul element al containerului.
  • end (): Această funcție va returna un iterator îndreptând spre trecut ultimul element al containerului.
  • avans (): Această funcție va crește o poziție de iterator la argumentul specificat.
  • următorul (): Această funcție va întoarce noul iterator care va fi punctat de iterator după creșterea pozițiilor din argumente.
  • precedent (): Această funcție va returna noul iterator care va fi punctat de iterator după decretarea pozițiilor din argumente.
  • inserter (): Această funcție va insera elementul în orice poziție a containerului.

Implementare practică

1. Cod C ++ pentru implementarea Iteratorului

Cod

#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;
)

ieşire:

2. Cod C ++ pentru a afișa funcționalitatea iteratorului

Cod

#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;
)

ieşire:

Categorii de Iterator

Începând cu C ++ 17, există 5 tipuri diferite de iteratoare care pot fi clasificate în funcție de tipul de funcționalitate, așa cum se arată în organigrama de mai jos:

  • Input Iterator (stdin) : Datorită funcționalității limitate, acestea sunt cele mai slabe dintre toate iteratoarele cu funcționalitate de citire și avansare. Nu poate modifica valoarea containerului. Poate fi utilizat ca operatori de intrare, operatorul de drepturi (*), operatorul egal (! =), Operatorul de creștere (++) și operatorul egal (==). De asemenea, pentru operații secvențiale de intrare.
  • Iterator de ieșire (stdout): Iterator numai pentru stocare, iterator numai pentru scriere, care este utilizat pentru a modifica valoarea unui container. De asemenea, au o funcționalitate foarte limitată. Iterator nu poate accesa elementul. Operatorul de atribuire (=) și operatorul de creștere (++) pot fi folosiți ca iteratori de ieșire. Numai într-un algoritm cu un singur pas.
  • Forward Iterator (listă cu linkuri simple): Acest Iterator conține funcționalitatea atât a Iteratorilor de intrare cât și a ieșirii. Se poate avansa în direcție cu un pas la un moment dat. Pentru citirea și scrierea într-un container, este cel mai preferat iterator care acceptă reutilizarea și economisirea. Acceptă toți operatorii de mai sus.
  • Iterator bidirecțional (listă dublă legată): întrucât numele sugerează deja bi-direcțional, ceea ce îl face mai puternic decât iteratorii de mai sus. De asemenea, acceptă citirea și scrierea într-un container. Suporta operatorul Decrement (-).
  • Random Access Iterator (matrice): cel mai puternic iterator este cel mai puternic iterator, deoarece poate citi, scrie și poate accesa aleatoriu. Funcționalitatea pointer precum adunarea și scăderea indicelui.

Avantajele Iteratorului în C ++

Dacă trebuie să vă deplasați de la un element pe care iteratorul îl indică în prezent către un alt element care este potențial n pași de iteratorul dvs. curent. Primele patru din ierarhie vor avea nevoie de un timp liniar pentru a face acest lucru în timp ce un iterator cu acces aleatoriu poate face asta în timp constant și este mult mai fascinant, deoarece acolo este economisit timp. Este cea mai importantă caracteristică pe care o oferă un Iterator. Mai multe sunt menționate mai jos

  • Eficiența codului: Dacă avem tipuri de P de containere de date și lucruri Q pe care vrem să le facem, atunci vom încheia scrierea algoritmilor P * Q. Dacă datele sunt, de asemenea, de tip R diferite, atunci am putea termina cu algoritmul P * Q * R. Deci, folosind iteratorii, îl putem face în algoritmul P + Q. Am economisit 90% din timp și muncă. Aducând eficiența codului la nivelul următor. Conceptul din spatele eficienței este acela că iteratorul de intrare peste sursă și cel de ieșire pe secvența țintă nu trebuie să fie de același tip.
  • Procesare dinamică: Iteratorii au funcționalități dinamice, cum ar fi schimbul în același container, atribuirea copiilor, incrementarea, abandonarea și decretarea. Iteratorul oferă funcționalitatea pentru a elimina și adăuga dinamic elemente în container. Deoarece toate iteratoarele pot fi incrementate, iterarele de intrare pot fi comparate și retransmise la o valoare. Iterarele bidirecționale pot fi decretate. Principalul aspect este să scrieți o singură funcție și să o utilizați pentru orice container.

Dezavantajele Iteratorului în C ++

  • Nu puteți trece de la o structură de date la alta în același timp într-un mod complex. Iteratorul nu va funcționa în acest caz.
  • Dacă prelucrați printr-o listă și ați uitat ceva și acum doriți să vă întoarceți atunci nu puteți, deoarece iteratorii nu vor funcționa în acest fel.
  • În cazul în care trebuie să actualizați structura în timpul parcurgerii, nu o puteți face și din cauza modului iterator de stocare a poziției sale.

Concluzie

În timp ce folosesc iteratoare, țineți aceste două lucruri întotdeauna în minte pentru a face eficient codul. Treceți întotdeauna iteratorul într-o funcție în loc de containere. Niciodată nu ar trebui să returnați containerele în loc să returnați sau să treceți iteratorul. Puteți obține orice element folosind un iterator, dereference și trecând o pereche de iterator la un algoritm

Articole recomandate

Acesta este un ghid pentru Iteratorul din C ++. Aici discutăm operațiuni în iterator, categorii, avantaje și dezavantaje cu coduri și ieșiri. Puteți, de asemenea, să parcurgeți alte articole conexe pentru a afla mai multe-

  1. Arătări în C ++
  2. Ce este C ++
  3. C ++ Funcții Array
  4. Bucle în C ++
  5. Funcții de matricea PHP | Tipuri de funcții Array în PHP