Introduksjon til Iterator i C ++

Å krysse gjennom dine svært komplekse data som er lagret i forskjellige typer containere, for eksempel en Array, Vector, etc. i løpet av den minste utførelsestiden, er mulig på grunn av Iterator i C ++, en komponent i Standard Template Library (STL). Ikke bekymre deg for at det bare er en peker som et objekt, men det er smart fordi det ikke spiller noen rolle hvilken beholder du bruker, det vil gjøre algoritmen din uavhengig av Container-typen ved å tilby et felles grensesnitt for alle typer containere som en bro mellom algoritme og container. Iterator reduserer ikke bare kompleksiteten til et program, i stedet gjør utførelsestiden mye raskere.

For eksempel vil sorteringsalgoritmen som har to parametere, som slutter og starter iterator, utføre sorteringen i rekkefølge uavhengig av hvilken type beholder du bruker. Iterator tillater anvendelse av generiske algoritmer til datastrukturer. Datastrukturer kan bruke en Iterator til å eksponere en rekke elementer.

Drift ved bruk av Iterator

  • begynn (): Denne funksjonen vil returnere en iterator som peker til det første elementet i beholderen.
  • end (): Denne funksjonen vil returnere en iterator som peker til det siste elementet i beholderen.
  • forhånd (): Denne funksjonen vil øke en iteratorposisjon til det spesifiserte argumentet.
  • neste (): Denne funksjonen vil returnere den nye iteratoren som vil bli pekt av iteratoren etter å ha økt posisjonene i argumentene.
  • forrige (): Denne funksjonen vil returnere den nye iteratoren som vil bli pekt av iteratoren etter å ha dekrementert posisjonene i argumentene.
  • inserter (): Denne funksjonen vil sette inn elementet hvor som helst i beholderen.

Praktisk gjennomføring

1. C ++ -kode for å implementere Iterator

Kode

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

Produksjon:

2. C ++ -kode for å vise iteratorfunksjonalitet

Kode

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

Produksjon:

Iterator-kategorier

Fra og med C ++ 17 er det 5 forskjellige typer Iteratorer som kan klassifiseres avhengig av type funksjonalitet som vist i flytskjemaet nedenfor:

  • Input Iterator (stdin) : På grunn av begrenset funksjonalitet er de svakest av alle iteratorer med skrivebeskyttet og fremovergående funksjonalitet. Det kan ikke endre beholderverdien. Dereferensoperatør (*), Ikke lik operatør (! =), Inkrementoperator (++) og Lik operatør (==) kan brukes som inngangs iteratorer. Også for sekvensielle inngangsoperasjoner.
  • Output Iterator (stdout): Iterator bare for å lagre, skrivebeskyttet iterator som brukes til å endre verdien på en container. De har også veldig begrenset funksjonalitet. Iterator har ikke tilgang til elementet. Tildelingsoperatøren (=) og Inkrementoperatøren (++) kan brukes som output iteratorer. Bare i en enkeltpassalgoritme.
  • Forward Iterator (enkeltstående link): Denne Iterator inneholder funksjonaliteten til både Input og Output Iterators. Den kan bevege seg fremover i retning med ett skritt av gangen. For å lese og skrive til en container, er det den mest foretrukne iteratoren som støtter gjenbruk og lagring. Den støtter alle ovennevnte operatører.
  • Bidireksjonell Iterator (dobbeltkoblet liste): Som navnet allerede antyder toveisrettet som gjør det sterkere enn de ovennevnte iteratorene. Det støtter også lesing og skriving til en container. Den støtter Decrement-operatøren (-).
  • Random Access Iterator (matriser): Sterkeste iterator er den kraftigste iteratoren som den kan lese, skrive og få tilgang tilfeldig. Peker som funksjonalitet som pekertilsetning og subtraksjon.

Fordeler med Iterator i C ++

Hvis du trenger å flytte fra ett element som iterator for øyeblikket peker til et annet element som potensielt er noen få skritt fra din nåværende iterator. De fire første i hierarkiet vil ta en lineær tid å gjøre det mens en iterator med tilfeldig tilgang kan gjøre det i konstant tid, og det er mye mer fascinerende fordi det er der tiden spares. Det er den viktigste funksjonen som en Iterator gir. Noen flere er nevnt nedenfor

  • Kodeeffektivitet: Hvis vi har P-typer containere med data og Q-ting vi ønsker å gjøre med dem, vil vi ende opp med å skrive P * Q-algoritmer. Hvis dataene også er av forskjellige R-typer, kan vi ende opp med P * Q * R-algoritmen. Så ved å bruke iteratorene, kan vi gjøre det i P + Q-algoritmen. Vi sparte 90% av tiden og arbeidet. Tar effektiviteten til koden til neste nivå. Konseptet bak effektivitet er at input iterator over source og output iterator over målsekvensen ikke trenger å være av samme type.
  • Dynamisk prosessering: Iteratorer har dynamiske funksjoner som å bytte i den samme beholderen, kopi-tilordnbare, inkrementering, dereferencing og decrementing. Iteratoren gir funksjonaliteten til å fjerne og legge elementer til beholderen dynamisk. Ettersom alle iteratorer kan økes, kan input-iteratorer sammenlignes og henferenser til en verdi. Veiledende iteratorer kan dekrementeres. Hovedaspektet er å skrive en funksjon og bruke den til en hvilken som helst beholder.

Ulemper ved Iterator i C ++

  • Du kan ikke flytte fra en datastruktur til en annen samtidig på en eller annen kompleks måte. Iterator vil ikke fungere i så fall.
  • Hvis du behandler gjennom en liste, og du har glemt noe, og nå vil du gå tilbake, kan du ikke gjøre det fordi iteratorer ikke vil fungere på den måten.
  • I tilfelle du trenger å oppdatere strukturen under traversering, kan du ikke gjøre det også på grunn av iteratorens måte å lagre sin posisjon på.

Konklusjon

Når du bruker iteratorer, må du alltid huske disse to tingene for å gjøre koden effektiv. Før iteratoren alltid til en funksjon i stedet for containere. Du bør aldri returnere containere i stedet for retur eller passere iterator. Du kan få et hvilket som helst element ved hjelp av en iterator, dereference og overføre et par av iteratoren til en algoritme

Anbefalte artikler

Dette er en guide til Iterator i C ++. Her diskuterer vi operasjoner i iteratoren, kategorier, fordeler og ulemper med koder og utganger. Du kan også gå gjennom andre relaterte artikler for å lære mer-

  1. Arrays i C ++
  2. Hva er C ++
  3. C ++ Array-funksjoner
  4. Looper i C ++
  5. PHP Array Functions | Typer Array-funksjoner i PHP