Johdatus C ++: n Iteratoriin

Erittäin monimutkaisten tietojen, jotka on tallennettu erityyppisiin säiliöihin, kuten taulukkoon, vektoreihin jne., Tallentaminen pienimmällä suoritusajalla on mahdollista, koska C ++: n Iterator on standardi mallikirjaston (STL) osa. Älä huoli, se on vain osoitin, kuten esine, mutta se on älykäs, koska ei ole väliä mitä säilöä käytät, se tekee algoritmistisi riippumattoman konttityypistä tarjoamalla yhteisen käyttöliittymän kaikentyyppisille kontteille, kuten sillan algoritmi ja säilö. Iterator ei vain vähennä ohjelman monimutkaisuutta, vaan nopeuttaa suoritusta.

Esimerkiksi lajittelualgoritmi, jolla on kaksi parametria, päättyvä ja aloittava iteraattori, suorittaa lajittelun järjestyksessä riippumatta siitä, minkä tyyppistä säilöä käytät. Iterator mahdollistaa geneeristen algoritmien soveltamisen tietorakenteisiin. Tietorakenteet voivat käyttää Iteratoria paljastamaan joukon elementtejä.

Toiminnot Iteratorilla

  • aloita (): Tämä toiminto palauttaa iteraattorin, joka osoittaa säilön ensimmäiseen elementtiin.
  • end (): Tämä toiminto palauttaa iteraattorin, joka osoittaa säilön viimeisen elementin ohi.
  • etukäteen (): Tämä toiminto kasvattaa iteraattorin sijaintia määritettyyn argumenttiin.
  • seuraava (): Tämä toiminto palauttaa uuden iteraattorin, jonka iteraattori osoittaa, kun argumentteja on kasvatettu.
  • edellinen (): Tämä toiminto palauttaa uuden iteraattorin, jonka iteraattori osoittaa sen jälkeen, kun argumenttien sijainnit ovat pienentyneet.
  • inserter (): Tämä toiminto lisää elementin mihin tahansa astian sijaintiin.

Käytännön toteutus

1. C ++ -koodi Iteratorin toteuttamiseksi

Koodi

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

lähtö:

2. C ++ -koodi näyttää iteraattoritoiminnot

Koodi

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

lähtö:

Iterator-luokat

C ++ 17: stä lähtien on 5 erityyppistä iteraattoria, jotka voidaan luokitella toiminnallisuudesta riippuen, kuten alla olevassa vuokaaviossa esitetään:

  • Tulo Iterator (stdin) : Rajoitetun toiminnallisuuden vuoksi he ovat heikoimpia kaikista iteraattoreista, joilla on vain luku- ja eteenpäin siirtävä toiminto. Se ei voi muuttaa säilön arvoa. Dereferenssioperaattoria (*), ei yhtä operaattoria (! =), Inkrementaalioperaattoria (++) ja yhtäsuuria operaattoria (==) voidaan käyttää syöttökeroittajina. Myös peräkkäisiin syöttötoimintoihin.
  • Tulosteteraattori (stdout): Vain iteraattori vain kirjoitetun iteraattorin tallentamiseksi, jota käytetään säilön arvon muuttamiseen. Niiden toiminnallisuus on myös erittäin rajallinen. Iterator ei pääse elementtiin. Tehtäväoperaattoria (=) ja lisäysoperaattoria (++) voidaan käyttää lähtökertaattoreina. Vain yksipäästöisessä algoritmissa.
  • Eteenpäin jatkaja (linkitetty luettelo): Tämä iteraattori sisältää sekä tulo- että lähtö-iteraattoreiden toiminnot. Se voi siirtyä eteenpäin suuntaan askel kerrallaan. Säiliöön lukemista ja kirjoittamista varten suosituin iteraattori tukee uudelleenkäyttöä ja tallentamista. Se tukee kaikkia yllä mainittuja operaattoreita.
  • Bidirectional Iterator (kaksinkertaisesti linkitetty luettelo): Kuten nimi jo viittaa kaksisuuntaiseen, mikä tekee siitä vahvemman kuin yllä olevat iteraattorit. Se tukee myös säilöön lukemista ja kirjoittamista. Se tukee Decrement-operaattoria (-).
  • Random Access Iterator (taulukot): Vahvin iteraattori on tehokkain iteraattori, koska se osaa lukea, kirjoittaa ja käyttää satunnaisesti. Osoittimen toiminnallisuus, kuten osoittimen lisääminen ja vähentäminen.

Iteraattorin edut C ++: ssa

Jos sinun on siirryttävä yhdestä elementistä, jonka iteraattori osoittaa tällä hetkellä toiseen elementtiin, joka on mahdollisesti n askeleen päässä nykyisestä iteraattoristasi. Hierarkian ensimmäiset neljä vievät aikaan lineaarisen ajan, kun hajasaannin iteraattori voi tehdä sen vakiona. Tämä on paljon kiehtovampaa, koska aika säästää. Se on tärkein ominaisuus, jonka Iterator tarjoaa. Jotkut muut mainitaan alla

  • Kooditehokkuus: Jos meillä on P-tyyppisiä tietosäiliöitä ja Q-asioita, jotka haluamme tehdä niiden kanssa, lopulta kirjoitamme P * Q-algoritmeja. Jos tiedot ovat myös R-tyyppisiä, saatamme lopulta päästä P * Q * R -algoritmiin. Joten käyttämällä iteraattoreita, voimme tehdä sen P + Q-algoritmissa. Säästimme 90% ajasta ja työstä. Koodin tehokkuuden siirtäminen seuraavalle tasolle. Tehokkuuden periaate on, että lähteen iteraattorin ja kohdesekvenssin yli tulevan iteraattorin ei tarvitse olla saman tyyppisiä.
  • Dynaaminen prosessointi: Iteraattoreilla on dynaamisia toimintoja, kuten vaihtaminen samassa säilytystilassa, kopiointi-määritettävissä, lisääminen, neuvottelujen poistaminen ja pienentäminen. Iteraattori tarjoaa toiminnot elementtien poistamiseksi ja lisäämiseksi dynaamisesti säilöön. Koska kaikkia iteraattoreita voidaan kasvattaa, tulo iteraattoreita voidaan verrata ja viittaa arvoon. Kaksisuuntaista iteraattoria voidaan pienentää. Pääasia on kirjoittaa yksi funktio ja käyttää sitä mihin tahansa säilöön.

Iteraattorin haitat C ++: ssa

  • Et voi siirtyä tietorakenteesta toiseen samanaikaisesti jollain monimutkaisella tavalla. Iteraattori ei toimi siinä tapauksessa.
  • Jos käsittelet luetteloa ja unohdat jotain ja haluat nyt palata takaisin, et voi, koska iteraattorit eivät toimi tällä tavalla.
  • Jos joudut päivittämään rakenteen liikkumisen aikana, et voi tehdä niin, koska iteraattori voi tallentaa sijaintinsa.

johtopäätös

Kun käytät iteraattoreita, pidä nämä kaksi asiaa aina mielessä koodin tehostamiseksi. Siirrä iteraattori aina toimintoon säiliöiden sijasta. Älä koskaan palauta kontteja sen sijaan, että palautat tai ohitat iteraattorin. Voit saada minkä tahansa elementin käyttämällä iteraattoria, purkamista ja siirtämällä iteraattoriparin algoritmiin

Suositellut artikkelit

Tämä on opas C ++: n Iteratoriin. Tässä keskustellaan iteraattorin toiminnoista, luokista, eduista ja haitoista koodeilla ja tuotoksilla. Voit myös käydä läpi muiden aiheeseen liittyvien artikkeleidemme saadaksesi lisätietoja-

  1. Ryhmät C ++: ssa
  2. Mikä on C ++
  3. C ++ -ryhmän toiminnot
  4. Silmukoita C ++: ssa
  5. PHP-taulukon toiminnot | PHP: n ryhmätoimintojen tyypit