iterators stl
Popoln pregled iteratorjev v STL.
V tej vadnici bomo preučili podrobnosti iteratorjev, njihove vrste, prednosti in različne funkcije, ki jih podpirajo.
java kopira 2d polje v drugo polje
Kaj je Iterator? Na splošno je iterator podoben vsakemu objektu, ki kaže na določen element v obsegu podatkov, na primer na matriko ali vsebnik. Ponavljalec je tako kot kazalec v C.
=> Poiščite celotno serijo usposabljanj za C ++ tukaj.
Kaj se boste naučili:
Pregled
V STL je iterator objekt, ki ga lahko uporabimo za prehod ali prehod skozi elemente v vsebniku z uporabo nabora operaterjev, kot je operator prirastka (++) ali dereference operator (*).
Iteratorji so ključnega pomena pri programiranju STL, saj igrajo pomembno vlogo pri povezovanju algoritmov z vsebnikom, poleg tega pa dostopajo do podatkov, shranjenih v vsebnikih, in manipulirajo z njimi.
Vrste ponoviteljev
Glede na funkcionalnost, ki jo izvajajo iteratorji, so razvrščeni na naslednji način:
- Vhodni in izhodni pretvorniki : To so najbolj poenostavljene vrste iteratorjev. Najbolj uporabni so pri zaporednih vhodno-izhodnih operacijah, ki vsebujejo enojni prehod.
- Naprej Iteratorji : To so tako kot vhodni iteratorji, vendar imajo smer, tj. Smer naprej v smislu, da se lahko uporabljajo za prehod skozi obseg v smeri posredovanja. Če iteratorji naprej niso konstantni, jih lahko uporabimo tudi kot izhodne iteratorje. Večina standardnih vsebnikov STL podpira vsaj iteratorje naprej.
- Dvosmerni iteratorji : Ti so podobni posrednikom iteratorjev z edino razliko, da so dvosmerni. To pomeni, da lahko te dvosmerne iteratorje uporabljamo za prehod skozi obseg v smeri naprej in nazaj.
- Iteratorji z naključnim dostopom : Iteratorji z naključnim dostopom so najmočnejši med vsemi iteratorji. To so nesekvenčni iteratorji. Iteratorji z naključnim dostopom nam omogočajo dostop do poljubnih naključnih vrednosti z uporabo odmika za trenutno vrednost, ne da bi morali zaporedoma iti skozi vsak element. Pokažejo podobne lastnosti, kot so kazalci v C.
Treba je omeniti, da vsi zabojniki STL ne podpirajo vseh iteratorjev. Različni vsebniki podpirajo različne iteratorje, odvisno od zahteve njihove funkcionalnosti.
Spodaj je seznam vsebnikov, ki uporabljajo različne iteratorje:
Zabojniki | Iteratorji |
---|---|
Zemljevid | Dvosmerna |
Stack | Brez iteratorja |
Čakalna vrsta | Brez iteratorja |
Prednostna vrsta | Brez iteratorja |
Seznam | Dvosmerna |
Vektor | Naključni dostop |
in | Naključni dostop |
Multimap | Dvosmerna |
Nastavite | Dvosmerna |
Multiset | Dvosmerna |
Prednosti iteratorjev
Iteratorji so izjemno koristni, zlasti med programiranjem z uporabo različnih obsegov in vsebnikov.
Nekatere prednosti uporabe iteratorjev pri programiranju lahko povzamemo spodaj:
# 1) Ponovna uporaba kode
Dokler uporabljamo iteratorje za dostop do elementov v našem programu, lahko samo spremenimo ime vsebnika v definiciji našega iteratorja in preostalo kodo uporabimo na podoben način, kadar koli moramo spremeniti vsebnik.
To je še posebej uporabno v scenarijih, kjer nameravamo nadomestiti vektorski vsebnik s pomočjo vsebnika s seznamom. Če bi namesto iteratorjev uporabljali operator [], bi bila koda za dostop do elementov neuporabna, ko spremenimo vsebnike.
# 2) Enostavnost in priročnost programiranja
Iteratorji so opremljeni z različnimi vgrajenimi funkcijami, ki nam pomagajo pri lažjem in udobnem prehodu do vsebine vsebnika.
Na primer , nam ni treba nadaljevati s preverjanjem konca seznama ali podobnega nizu, kar moramo storiti med uporabo operatorjev [], in moramo spremeniti programsko kodo, kot kadar želimo dodati elemente, in jih moramo spremeniti v zanko .
Pri uporabi iteratorjev lahko neposredno dostopamo do funkcij start () in end () iteratorjev, ne da bi morali obdržati zavihek, ko pridemo na konec seznama, in jih tudi ni treba spreminjati za zanko.
# 3) Dinamično dodajanje / odstranjevanje
Med uporabo iteratorjev lahko enostavno in dinamično dodajamo ali odstranjujemo elemente v vsebniku, ne da bi morali elemente premikati tako, kot moramo to storiti v operatorjih [].
Pokažimo to z naslednjim primerom:
#include #include using namespace std; int main() { vector vec1 = { 1, 1, 2 }; // Declaring an iterator vector::iterator i; // Inserting element for (i = vec1.begin(); i != vec1.end(); ++i) { if (i == vec1.begin()) { i = vec1.insert(i, 3); // insert 3 at the beginning of vec1 } } // contents of vec1 3 1 1 2 cout<<'Vector contents after addition'; cout< Izhod:
Vsebina vektorja po dodajanju
3 1 1 2
Vsebina vektorjev po izbrisu
3 1 2
Kot je razvidno iz zgornjega primera, vidimo, da lahko z uporabo iteratorjev enostavno dodajamo ali odstranjujemo elemente iz vsebnika (v tem primeru vektor), ne da bi se morali zateči k kompleksnemu programiranju premikajočih se elementov in prestrukturiranju vsebnika.
Iteracijske funkcije
Ker so iteratorji sami vgrajeni konstrukti, podpirajo različne operacije, ki jih je mogoče izvesti na iteratorskih objektih. Te operacije / funkcije nam omogočajo učinkovito premikanje po območju in tudi manipulacijo z elementi v vsebniku.
Zdaj bomo videli nekaj večjih operacij, ki jih podpirajo iteratorji.
- začeti: Vrne prvi ali začetni položaj iteratorja.
- konec: Vrne zadnji položaj ali položaj 'po koncu' iteratorja.
- prev: Vrne novi iterator, potem ko zmanjša število položajev, podanih v argumentu.
- Naslednji: Vrne nov iterator po napredovanju ali povečanju števila položajev, podanih v argumentu.
- vstavljalnik: Vstavi element v kateri koli položaj v vsebniku.
- vnaprej: Poveča položaj iteratorja na določeno število, navedeno v argumentu.
V naslednjem programu bomo prikazali uporabo nekaterih funkcij / operacij:
#include #include #include using namespace std; int main() { vector v = { 1, 1,2,3,5 }; // declaring iterators to a vector vector::iterator itr1 = v.begin(); vector::iterator itr2 = v.end(); auto it = next(itr1, 2); // displaying iterator position cout << 'Using next() the new iterator is at: '; cout << *it << ' '; cout << endl; auto it1 = prev(itr2, 2); // displaying iterator position cout << 'The position of new iterator using prev() is: '; cout << *it1 << ' '; cout << endl; //advance advance(itr1,3); // displaying iterator position cout << 'After advance operation,itr1 is positioned at: '; cout << *itr1 << ' '; cout << endl; return 0; }
Izhod:
Z uporabo naslednjega () je novi iterator na: 2
Položaj novega iteratorja z uporabo prev () je: 3
Po operaciji vnaprej se postavi itr1 na: 3
Z uporabo zgornjega programa smo pokazali uporabo različnih iteratorskih operacij.
Zaključek
Tako smo prišli do konca te vaje o iteratorjih.
Doslej smo razpravljali o osnovah STL, od naše naslednje vadbe naprej bomo začeli z vsebniki STL in njihovim programiranjem.
=> Tukaj preverite popolno serijo C ++ BREZPLAČNIH vadb
Priporočeno branje