Sissejuhatus C ++ iteraatorisse

Erinevat tüüpi konteineritesse, näiteks massiivi, vektorisse jms salvestatud, väga keerukate andmete sirvimine väikseima täitmisajaga on võimalik tänu C ++ -s olevale Iteratorile, mis on standardsete mallide kogu (STL) komponent. Ärge muretsege, see on lihtsalt osuti nagu objekt, kuid see on arukas, kuna pole vahet, millist konteinerit kasutate. See muudab teie algoritmi konteineri tüübist sõltumatuks, pakkudes igat tüüpi konteineritele ühist liidest, näiteks sildade vahel algoritm ja konteiner. Iterator mitte ainult ei vähenda programmi keerukust, vaid muudab selle täitmise aja palju kiiremaks.

Näiteks sorteerimisalgoritm, millel on kaks parameetrit, lõpetav ja käivitav iteraator, viib sortimise läbi sõltumata sellest, millist tüüpi konteinerit te kasutate. Iterator lubab andmestruktuuridele rakendada üldisi algoritme. Andmestruktuuride abil saab Iteraatorit kasutada mitmesuguste elementide paljastamiseks.

Toimingud Iteraatori abil

  • start (): See funktsioon tagastab iteraatori, mis osutab konteineri esimesele elemendile.
  • end (): See funktsioon tagastab iteraatori, osutades konteineri viimasele elemendile.
  • edasiminek (): See funktsioon suurendab iteraatori positsiooni määratud argumendini.
  • järgmine (): See funktsioon tagastab uue iteraatori, millele iteraator osutab pärast argumentide positsioonide suurendamist.
  • previous (): See funktsioon tagastab uue iteraatori, millele iteraator osutab pärast argumentide positsioonide vähendamist.
  • inserter (): See funktsioon lisab elemendi konteineri suvalisse kohta.

Praktiline rakendamine

1. C ++ kood Iteraatori rakendamiseks

Kood

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

Väljund:

2. C ++ kood iteraatori funktsionaalsuse näitamiseks

Kood

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

Väljund:

Iteraatori kategooriad

Alates C ++ 17 versioonist on 5 erinevat tüüpi iteraatoreid, mida saab klassifitseerida sõltuvalt funktsionaalsuse tüübist, nagu on näidatud alloleval vooskeemil:

  • Sisestusteraator (stdin) : Piiratud funktsionaalsuse tõttu on nad kõigist lugemis- ja edasiliikumisfunktsioonidega iteraatoritest kõige nõrgemad. See ei saa konteineri väärtust muuta. Sisend iteraatoritena saab kasutada deferentsi operaatorit (*), mitte võrdset operaatorit (! =), Suurendamise operaatorit (++) ja võrdset operaatorit (==). Samuti järjestikuste sisestustoimingute jaoks.
  • Väljundi iteraator (stdout): iteraator ainult kirjutamiseks kirjutatava iteraatori jaoks, mida kasutatakse konteineri väärtuse muutmiseks. Neil on ka väga piiratud funktsionaalsus. Iterator ei pääse elemendile juurde. Väljundi iteraatoritena saab kasutada määramisoperaatorit (=) ja suurendamise operaatorit (++). Ainult ühekäigulises algoritmis.
  • Edastamise iteraator (eraldi lingitud loend): see iteraator sisaldab nii sisend- kui ka väljunddeteraatori funktsioone. See võib liikuda suunas ühe sammuga korraga edasi. Konteinerisse lugemiseks ja sellesse kirjutamiseks on kõige eelistatavam iteraator, mis toetab taaskasutamist ja salvestamist. See toetab kõiki ülaltoodud operaatoreid.
  • Kahesuunaline iteraator (kahekordselt seotud loetelu): kuna nimi viitab juba kahesuunalisele, mis muudab selle ülaltoodud iteraatoritest tugevamaks. See toetab ka konteinerisse lugemist ja kirjutamist. See toetab operaatorit Decrement (-).
  • Juhusliku juurdepääsu iteraator (massiivid): tugevaim iteraator on võimsaim iteraator, kuna see suudab lugeda, kirjutada ja pääseb juurde juhuslikult. Osuti funktsionaalsus, nagu osuti liitmine ja lahutamine.

Iteraatori eelised rakenduses C ++

Kui peate liikuma ühelt elemendilt, osutab iteraator hetkel teisele elemendile, mis on potentsiaalselt n sammu kaugusel teie praegusest iteraatorist. Hierarhia esimesed neli kuluvad selleks lineaarselt, samal ajal kui suvalise juurdepääsuga iteraator saab seda teha konstantse aja jooksul ja see on veelgi põnevam, sest just seal hoitakse aega kokku. See on kõige olulisem funktsioon, mida Iterator pakub. Allpool mainitakse veel mõnda

  • Koodi efektiivsus: kui meil on P-tüüpi andmemahuteid ja Q-asju, mida me tahame nendega teha, kirjutame lõpuks P * Q-algoritme. Kui andmed on ka erinevat tüüpi R-vormingus, võime lõpuks jõuda P * Q * R-algoritmini. Nii et iteraatoreid kasutades saame seda teha P + Q algoritmis. Säästsime 90% ajast ja tööst. Koodi efektiivsuse viimine järgmisele tasemele. Tõhususe kontseptsioon seisneb selles, et sisend iteraator üle lähteallika ja väljundi iteraator sihtjärjestuse kohal ei pea olema sama tüüpi.
  • Dünaamiline töötlemine: Iteraatoritel on dünaamilised funktsioonid, näiteks vahetamine samas konteineris, määratav koopiaga, suurendamine, deferentsi vähendamine ja vähendamine. Iteraator pakub funktsioone konteineri elementide eemaldamiseks ja dünaamiliseks lisamiseks. Kuna kõiki iteraatoreid saab suurendada, saab sisend iteraatoreid võrrelda ja nende väärtusest loobumise. Kahesuunalisi iteraatoreid saab vähendada. Peamine aspekt on ühe funktsiooni kirjutamine ja selle kasutamine ükskõik millise konteineri jaoks.

Iteraatori puudused C ++ -s

  • Sa ei saa ühel keerulisel viisil ühelt andmestruktuurilt teisele liikuda. Iteraator sel juhul ei tööta.
  • Kui töötlete loendit ja unustasite midagi ja soovite nüüd tagasi minna, siis ei saa, sest iteraatorid ei tööta sel viisil.
  • Juhul kui peate liikumise ajal struktuuri värskendama, ei saa seda teha ka iteraatori viisi tõttu oma positsiooni salvestada.

Järeldus

Iteraatorite kasutamisel pidage koodi tõhustamiseks alati neid kahte asja meeles. Pange iteraator konteinerite asemel alati funktsiooni. Kunagi ei tohiks konteinereid tagastamise või iteraatori läbimise asemel tagastada. Võite saada mis tahes elemendi, kasutades iteraatorit, dereferentsi ja iteraatori paari edastamist algoritmile

Soovitatavad artiklid

See on juhend C ++ Iteratorile. Siin käsitleme iteraatori toiminguid, kategooriaid, eeliseid ja puudusi koodide ja väljunditega. Lisateavet leiate ka meie muudest seotud artiklitest -

  1. Massiivid C ++
  2. Mis on C ++
  3. C ++ massiivi funktsioonid
  4. Silmus C ++
  5. PHP-massiivi funktsioonid | Massiivi funktsioonide tüübid PHP-s

Kategooria: