iterators stl
Kompletný prehľad iterátorov v STL.
V tomto výučbe sa pozrieme na podrobnosti iterátorov, ich typy, výhody a rôzne podporované funkcie.
je java prepojený zoznam dvojnásobne prepojený
Čo je iterátor? Iterátor je vo všeobecnosti rovnako ako akýkoľvek objekt, ktorý smeruje na konkrétny prvok v rozsahu údajov, ako je napríklad pole alebo kontajner. Iterátor je ako ukazovateľ v C.
=> Celú sériu školení pre C ++ nájdete tu.
Čo sa dozviete:
Prehľad
V STL je iterátor objekt, ktorý je možné použiť na prechádzanie alebo prechádzanie prvkami v kontajneri pomocou množiny operátorov, ako je operátor prírastku (++) alebo dereferenčný operátor (*).
Iterátory sú pri programovaní STL rozhodujúce, pretože popri prístupe k údajom uloženým vo vnútri kontajnerov a pri manipulácii s nimi majú dôležitú úlohu pri pripájaní algoritmov k kontajneru.
Typy iterátorov
Podľa funkčnosti implementovanej iterátormi sú klasifikované nasledovne:
- Vstupné a výstupné iterátory : Toto sú najjednoduchšie typy iterátorov. Sú najužitočnejšie v postupných vstupno-výstupných operáciách obsahujúcich jednopásmový prenos.
- Doprední iterátori : Sú to podobné ako vstupné iterátory, ale majú smer, tj. Smer vpred v tom zmysle, že ich možno použiť na prechádzanie rozsahom v smere dopredu. Ak dopredné iterátory nie sú konštantné, môžu sa použiť aj ako výstupné iterátory. Väčšina štandardných kontajnerov STL podporuje aspoň dopredné iterátory.
- Obojsmerné iterátory : Sú podobné ako dopredné iterátory s jediným rozdielom, že sú obojsmerné. To znamená, že tieto obojsmerné iterátory môžeme použiť na prechádzanie rozsahu v smere dopredu aj dozadu.
- Iterátory s náhodným prístupom : Iterátory s náhodným prístupom sú najsilnejšie spomedzi všetkých iterátorov. Toto sú nesekvenčné iterátory. Iterátory s náhodným prístupom nám umožňujú prístup k akejkoľvek náhodnej hodnote aplikovaním posunu na aktuálnu hodnotu bez toho, aby sme museli postupne prechádzať každým prvkom. Vykazujú podobné vlastnosti ako ukazovatele v C.
Je potrebné si uvedomiť, že nie všetky kontajnery STL podporujú všetky iterátory. Rôzne kontajnery podporujú rôzne iterátory v závislosti od požiadavky na ich funkčnosť.
Nižšie je uvedený zoznam kontajnerov, ktoré používajú rôzne iterátory:
Kontajnery | Iterátory |
---|---|
Mapa | Obojsmerný |
Stoh | Žiadny iterátor |
Fronta | Žiadny iterátor |
Prioritný front | Žiadny iterátor |
Zoznam | Obojsmerný |
Vektor | Náhodný prístup |
a | Náhodný prístup |
Multimap | Obojsmerný |
Nastaviť | Obojsmerný |
Multiset | Obojsmerný |
Výhody iterátorov
Iterátory sú mimoriadne užitočné najmä pri programovaní pomocou rôznych rozsahov a kontajnerov.
Niektoré z výhod použitia iterátorov v programovaní možno zhrnúť nižšie:
# 1) Opätovná použiteľnosť kódu
Pokiaľ používame iterátory na prístup k prvkom v našom programe, stačí zmeniť názov kontajnera v našej definícii iterátora a zvyšok kódu použiť podobným spôsobom, kedykoľvek potrebujeme kontajner zmeniť.
To je obzvlášť užitočné v scenároch, keď plánujeme nahradiť vektorový kontajner pomocou kontajnera so zoznamom. Ak by sme namiesto iterátorov používali operátor (), kód na prístup k prvkom by bol pri výmene kontajnerov zbytočný.
# 2) Jednoduchosť a pohodlie programovania
Iterátory prichádzajú s rôznymi zabudovanými funkciami, ktoré nám pomáhajú pri ľahkom a pohodlnom prechádzaní a prístupe k obsahu kontajnera.
Napríklad , nemusíme stále kontrolovať koniec zoznamu alebo pole, ktoré musíme robiť pri používaní operátorov (), a musíme zmeniť programový kód, ako keď chceme pridať prvky, a musíme ich zmeniť za slučku .
Pri použití iterátorov môžeme priamo pristupovať k funkciám iterátorov start () a end () bez toho, aby sme museli držať kartu, keď sa dostaneme na koniec zoznamu, a tiež ich nemusíme meniť za slučku.
# 3) Dynamické pridanie / odstránenie
Pri použití iterátorov môžeme ľahko a dynamicky pridávať alebo odstraňovať prvky v kontajneri bez toho, aby sme museli posúvať prvky, ako to musíme robiť v operátoroch ().
Ukážme si to na nasledujúcom príklade:
#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< Výkon:
Vektorový obsah po pridaní
3 1 1 2
Vektorový obsah po odstránení
3 1 2
Ako je vidieť vo vyššie uvedenom príklade, vidíme, že pomocou iterátorov môžeme ľahko pridávať alebo odstraňovať prvky z kontajnera (v tomto prípade vektoru) bez toho, aby sme sa museli uchýliť ku komplexnému programovaniu radiacich prvkov a reštrukturalizácii kontajnera.
Funkcie iterátora
Pretože samotné iterátory sú vstavané konštrukcie, podporujú rôzne operácie, ktoré je možné vykonať s objektmi iterátora. Tieto operácie / funkcie nám umožňujú efektívne prechádzať rozsahom a tiež manipulovať s prvkami vo vnútri kontajnera.
Teraz uvidíme niekoľko významných operácií, ktoré iterátory podporujú.
- začať: Vráti prvú alebo začiatočnú pozíciu iterátora.
- koniec: Vráti poslednú pozíciu alebo pozíciu „po konci“ iterátora.
- predchádzajúci: Vráti nový iterátor po znížení počtu pozícií uvedených v argumente.
- Ďalšie: Vráti nový iterátor po zvýšení alebo zvýšení počtu pozícií uvedených v argumente.
- vkladač: Vloží prvok na ľubovoľné miesto v kontajneri.
- vopred: Zvyšuje pozíciu iterátora na zadaný počet uvedený v argumente.
Použitie niektorých z týchto funkcií / operácií si ukážeme v nasledujúcom programe:
#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; }
Výkon:
Použitím next () je nový iterátor na adrese: 2
Pozícia nového iterátora používajúceho prev () je: 3
Po predbežnej operácii je itr1 umiestnený na: 3
Pomocou vyššie uvedeného programu sme demonštrovali použitie rôznych operácií iterátora.
Záver
Dostali sme sa teda na koniec tohto tutoriálu o iterátoroch.
Doteraz sme diskutovali o základoch STL, od nášho ďalšieho tutoriálu začneme s kontajnermi STL a ich programovaním.
=> Skontrolujte kompletnú sériu školení C ++ ZDARMA tu.
Odporúčané čítanie