Úvod do Iterátoru v C ++

Prohledávání vašich vysoce složitých dat uložených v různých typech kontejnerů, jako je Array, Vector atd., V nejkratší době provedení, je možné díky Iterátoru v C ++, součásti Standard Template Library (STL). Nebojte se, je to jen ukazatel jako objekt, ale je to chytré, protože nezáleží na tom, jaký kontejner používáte, bude váš algoritmus nezávislý na typu kontejneru tím, že poskytne společné rozhraní pro všechny typy kontejnerů, jako je most mezi algoritmus a kontejner. Iterátor nejen snižuje složitost programu, ale zkracuje dobu provádění.

Například algoritmus sort (), který má dva parametry, koncový a počáteční iterátor, provede třídění v pořadí bez ohledu na to, jaký typ kontejneru používáte. Iterátor umožňuje aplikaci obecných algoritmů na datové struktury. Datové struktury mohou pomocí Iterátoru vystavit řadu prvků.

Operace pomocí Iterátoru

  • begin (): Tato funkce vrátí iterátor směřující k prvnímu prvku kontejneru.
  • end (): Tato funkce vrátí iterátor směřující k minulosti posledního prvku kontejneru.
  • advance (): Tato funkce zvýší pozici iterátoru k zadanému argumentu.
  • next (): Tato funkce vrátí nový iterátor, na který bude iterátor směřovat po zvýšení pozic v argumentech.
  • previous (): Tato funkce vrátí nový iterátor, na který bude iterátor směřovat po dekrementaci pozic v argumentech.
  • insertter (): Tato funkce vloží prvek do libovolné polohy v kontejneru.

Praktická implementace

1. C ++ kód pro implementaci Iterátoru

Kód

#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ýstup:

2. C ++ kód pro zobrazení funkce iterátoru

Kód

#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ýstup:

Iterátorské kategorie

Od C ++ 17 existuje 5 různých typů Iterátorů, které lze klasifikovat v závislosti na typu funkčnosti, jak je uvedeno v vývojovém diagramu níže:

  • Input Iterator (stdin) : Vzhledem k omezené funkčnosti jsou nejslabší ze všech iterátorů s funkcí pouze pro čtení a vpřed. Nelze změnit hodnotu kontejneru. Jako iterátory vstupu lze použít operátor Dereference (*), Operátor nerovná (! =), Operátor přírůstku (++) a Operátor Rovný (==). Také pro operace sekvenčního vstupu.
  • Výstupní Iterátor (stdout): Iterátor pouze pro ukládání, iterátor pouze pro zápis, který se používá k úpravě hodnoty kontejneru. Mají také velmi omezenou funkčnost. Iterátor nemá přístup k prvku. Operátor přiřazení (=) a Operátor přírůstku (++) lze použít jako výstupní iterátory. Pouze v algoritmu s jedním průchodem.
  • Přední Iterátor (seznam s jediným propojením): Tento Iterátor obsahuje funkce vstupních i výstupních Iterátorů. Může se pohybovat vpřed ve směru o jeden krok po druhém. Pro čtení a zápis do kontejneru je nejvýhodnějším iterátorem, který podporuje opětovné použití a uložení. Podporuje všechny výše uvedené operátory.
  • Obousměrný iterátor (dvojitě propojený seznam): Jak již název napovídá, je obousměrný, což je silnější než výše uvedené iterátory. Podporuje také čtení a zápis do kontejneru. Podporuje operátor Decrement (-).
  • Iterátor s náhodným přístupem (matice): Nejsilnější iterátor je nejsilnějším iterátorem, protože dokáže číst, psát a mít náhodný přístup. Funkce jako ukazatel, jako je sčítání a odčítání ukazatele.

Výhody Iterátoru v C ++

Pokud se potřebujete přesunout z jednoho prvku, který iterátor aktuálně ukazuje na jiný prvek, který je potenciálně n kroků od vašeho aktuálního iterátoru. První čtyři v hierarchii to budou vyžadovat lineární množství času, zatímco iterátor s náhodným přístupem to dokáže v konstantním čase a to je mnohem fascinující, protože tam se šetří čas. Je to nejdůležitější funkce, kterou poskytuje Iterator. Některé další jsou uvedeny níže

  • Efektivita kódu: Pokud máme P druhy kontejnerů dat a Q věcí, které s nimi chceme dělat, pak napíšeme P * Q algoritmy. Pokud jsou data také R různých typů, můžeme skončit algoritmem P * Q * R. Takže pomocí iterátorů to můžeme udělat v algoritmu P + Q. Ušetřili jsme 90% času a práce. Zvyšování účinnosti kódu na další úroveň. Koncept za účinností je, že vstupní iterátor nad zdrojem a výstupní iterátor nad cílovou sekvencí nemusí být stejného typu.
  • Dynamické zpracování: Iterátory mají dynamické funkce, jako je výměna ve stejném kontejneru, kopírování, zvyšování, dereferencování a snižování. Iterátor poskytuje funkci pro odebrání a dynamické přidání prvků do kontejneru. Protože všechny iterátory lze zvýšit, lze iterátory vstupů porovnat a dereferencovat na hodnotu. Obousměrné iterátory lze dekrementovat. Hlavním aspektem je napsat jednu funkci a použít ji pro jakýkoli kontejner.

Nevýhody Iterátoru v C ++

  • Z jedné datové struktury do druhé se nemůžete pohybovat současně složitým způsobem. Iterátor v tom případě nebude fungovat.
  • Pokud zpracováváte seznam a na něco jste zapomněli a nyní se chcete vrátit, nemůžete, protože iterátory nebudou tímto způsobem fungovat.
  • Pokud potřebujete aktualizovat strukturu během procházení, nemůžete to udělat také kvůli iteračnímu způsobu uložení její pozice.

Závěr

Při používání iterátorů mějte tyto dvě věci vždy na paměti, aby byl kód efektivní. Vždy předávejte iterátor do funkce místo kontejnerů. Nikdy byste neměli vracet kontejnery místo návratu nebo předávat iterátor. Pomocí iterátoru, dereference a předání dvojice iterátoru algoritmu můžete získat jakýkoli prvek

Doporučené články

Toto je průvodce Iterátorem v C ++. Zde diskutujeme operace v iterátoru, kategorie, výhody a nevýhody s kódy a výstupy. Další informace naleznete také v dalších souvisejících článcích.

  1. Pole v C ++
  2. Co je C ++
  3. Funkce C ++ Array
  4. Smyčky v C ++
  5. PHP Array Funkce | Typy funkcí polí v PHP

Kategorie: