iterators stl
Kompletní přehled iterátorů v STL.
V tomto kurzu se podíváme na podrobnosti iterátorů, jejich typy, výhody a různé funkce, které podporují.
falešný e-mail a heslo, které funguje
Co je to Iterátor? Obecně platí, že iterátor je jako každý objekt, který ukazuje na konkrétní prvek v rozsahu dat, jako je pole nebo kontejner. Iterátor je jako ukazatel v C.
=> Podívejte se na celou sérii školení C ++ zde.
Co se naučíte:
Přehled
V STL je iterátor objekt, který lze použít k procházení nebo procházení prvky v kontejneru pomocí sady operátorů, jako je operátor přírůstku (++) nebo dereference (*).
Iterátory jsou v programování STL zásadní, protože hrají důležitou roli při připojování algoritmů ke kontejneru kromě přístupu a manipulace s daty uloženými uvnitř kontejnerů.
Druhy iterátorů
V závislosti na funkčnosti implementované iterátory jsou klasifikovány takto:
- Vstupní a výstupní iterátory : Toto jsou nejjednodušší typy iterátorů. Nejužitečnější jsou v postupných vstupně-výstupních operacích obsahujících jednopásmový přenos.
- Vpřed Iterátoři : Jsou to stejné jako vstupní iterátory, ale mají směr, tj. Směr vpřed v tom smyslu, že je lze použít k procházení rozsahem ve směru předávání. Pokud dopředné iterátory nejsou konstantní, lze je také použít jako výstupní iterátory. Většina standardních kontejnerů STL alespoň podporuje dopředné iterátory.
- Obousměrné iterátory : Jsou podobné dopředným iterátorům s jediným rozdílem, že jsou obousměrné. To znamená, že můžeme použít tyto obousměrné iterátory pro procházení rozsahem ve směru dopředu i dozadu.
- Iterátory s náhodným přístupem : Iterátory s náhodným přístupem jsou nejsilnější ze všech iterátorů. Jedná se o nesekvenční iterátory. Iterátory s náhodným přístupem nám umožňují přístup k libovolné náhodné hodnotě pomocí posunutí na aktuální hodnotu, aniž bychom museli postupně procházet každý prvek. Vykazují podobné vlastnosti jako ukazatele v C.
Je třeba si uvědomit, že ne všechny kontejnery STL podporují všechny iterátory. Různé kontejnery podporují různé iterátory v závislosti na požadavku na jejich funkčnost.
Níže je uveden seznam kontejnerů, které používají různé iterátory:
Kontejnery | Iterátory |
---|---|
Mapa | Obousměrný |
Zásobník | Žádný iterátor |
Fronta | Žádný iterátor |
Prioritní fronta | Žádný iterátor |
Seznam | Obousměrný |
Vektor | Náhodný přístup |
a | Náhodný přístup |
Multimap | Obousměrný |
Soubor | Obousměrný |
Multiset | Obousměrný |
Výhody iterátorů
Iterátory jsou velmi užitečné, zejména při programování pomocí různých rozsahů a kontejnerů.
Některé z výhod používání iterátorů v programování lze shrnout níže:
# 1) Opakovaná použitelnost kódu
Dokud používáme iterátory pro přístup k prvkům v našem programu, můžeme jen změnit název kontejneru v naší definici iterátoru a zbytek kódu použít podobným způsobem, kdykoli potřebujeme kontejner změnit.
To je užitečné zejména ve scénářích, kdy plánujeme nahradit vektorový kontejner pomocí kontejneru seznamu. Pokud bychom místo iterátorů používali operátor (), kód pro přístup k prvkům by byl při změně kontejnerů k ničemu.
# 2) Snadnost a pohodlí programování
Iterátory přicházejí s různými vestavěnými funkcemi, které nám pomáhají při snadném a pohodlném procházení a přístupu k obsahu kontejneru.
Například , nemusíme neustále kontrolovat konec seznamu nebo pole, které musíme dělat při používání operátorů (), a musíme změnit programový kód, jako když chceme přidat prvky, a musíme je změnit pro smyčku .
Při použití iterátorů můžeme přímo přistupovat k funkcím iterátorů start () a end (), aniž bychom museli držet kartu, když se dostaneme na konec seznamu, a také je nemusíme měnit pro smyčku.
# 3) Dynamické Přidat / Odebrat
Při používání iterátorů můžeme snadno a dynamicky přidávat nebo odebírat prvky v kontejneru, aniž bychom museli posouvat prvky, jako to musíme dělat v operátorech ().
Ukážeme si to na následujícím příkladu:
#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ýstup:
Vektorový obsah po přidání
3 1 1 2
Vektorový obsah po odstranění
3 1 2
Jak je vidět ve výše uvedeném příkladu, vidíme, že pomocí iterátorů můžeme snadno přidávat nebo odebírat prvky z kontejneru (v tomto případě vektoru), aniž bychom se museli uchýlit ke složitému programování posunu prvků a restrukturalizaci kontejneru.
Funkce iterátoru
Jelikož samotné iterátory jsou předdefinované konstrukce, podporují různé operace, které lze na iterátorových objektech provádět. Tyto operace / funkce nám umožňují efektivně procházet rozsahem a také manipulovat s prvky uvnitř kontejneru.
Nyní uvidíme několik hlavních operací, které iterátory podporují.
- začít: Vrátí první nebo počáteční pozici iterátoru.
- konec: Vrátí poslední pozici nebo pozici „po konci“ iterátoru.
- předchozí: Vrátí nový iterátor po snížení počtu pozic uvedených v argumentu.
- další: Vrátí nový iterátor po posunutí nebo zvýšení počtu pozic uvedených v argumentu.
- zavaděč: Vloží prvek na libovolnou danou pozici v kontejneru.
- záloha: Zvyšuje pozici iterátoru na zadané číslo uvedené v argumentu.
Ukážeme použití některých z těchto funkcí / operací v následujícím programu:
#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ýstup:
Pomocí next () je nový iterátor na adrese: 2
Pozice nového iterátoru pomocí prev () je: 3
Po předběžné operaci je itr1 umístěn na: 3
Pomocí výše uvedeného programu jsme demonstrovali použití různých operací iterátoru.
Závěr
Tak jsme se dostali na konec tohoto tutoriálu o iterátorech.
Zatím jsme probrali základy STL, od našeho dalšího tutoriálu začneme s kontejnery STL a jejich programováním.
=> Zkontrolujte kompletní C ++ ZDARMA tréninkovou sérii zde.
Doporučené čtení