Introductie tot Iterator in C ++

Door de zeer complexe gegevens lopen die zijn opgeslagen in verschillende soorten containers, zoals een array, vector, enz. In de kortste uitvoeringstijd is mogelijk vanwege de Iterator in C ++, een onderdeel van Standard Template Library (STL). Maak je geen zorgen, het is gewoon een pointer zoals een object, maar het is slim omdat het niet uitmaakt welke container je gebruikt, het maakt je algoritme onafhankelijk van het type Container door een gemeenschappelijke interface te bieden voor alle soorten containers, zoals een brug tussen algoritme en container. Iterator vermindert niet alleen de complexiteit van een programma, maar maakt de uitvoeringstijd veel sneller.

Bijvoorbeeld, het sorteer () algoritme dat twee parameters heeft, eindigend en beginnend iterator, zal het sorteren uitvoeren, ongeacht welk type container u gebruikt. Iterator maakt de toepassing van generieke algoritmen op gegevensstructuren mogelijk. Datastructuren kunnen een Iterator gebruiken om een ​​reeks elementen bloot te leggen.

Bewerkingen met de Iterator

  • begin (): deze functie retourneert een iterator die naar het eerste element van de container wijst.
  • end (): met deze functie wordt een iterator geretourneerd die naar het laatste element van de container verwijst.
  • advance (): met deze functie wordt een iteratorpositie verhoogd naar het opgegeven argument.
  • next (): Met deze functie wordt de nieuwe iterator geretourneerd die door iterator wordt aangewezen nadat de posities in de argumenten zijn verhoogd.
  • vorige (): deze functie retourneert de nieuwe iterator die door iterator wordt aangewezen nadat de posities in de argumenten zijn verlaagd.
  • inserter (): met deze functie wordt het element op elke positie in de container ingevoegd.

Praktische implementatie

1. C ++ code om de Iterator te implementeren

Code

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

Output:

2. C ++ code om iteratorfunctionaliteit te tonen

Code

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

Output:

Iterator-categorieën

Vanaf C ++ 17 zijn er 5 verschillende typen Iterators die kunnen worden geclassificeerd, afhankelijk van het type functionaliteit zoals weergegeven in het stroomdiagram hieronder:

  • Input Iterator (stdin) : vanwege de beperkte functionaliteit zijn ze het zwakst van alle iterators met alleen-lezen en voorwaartse functionaliteit. Het kan de containerwaarde niet wijzigen. Dereference-operator (*), Not equal-operator (! =), Increment-operator (++) en Equal-operator (==) kunnen worden gebruikt als invoeriterators. Ook voor opeenvolgende invoerbewerkingen.
  • Output Iterator (stdout): Iterator alleen voor het opslaan, alleen-schrijven iterator die wordt gebruikt om de waarde van een container te wijzigen. Ze hebben ook een zeer beperkte functionaliteit. Iterator heeft geen toegang tot het element. De toewijzingsoperator (=) en Increment-operator (++) kunnen worden gebruikt als uitvoeriterators. Alleen in een single-pass algoritme.
  • Forward Iterator (afzonderlijk gekoppelde lijst): deze Iterator bevat de functionaliteit van zowel Input- als Output Iterators. Het kan met één stap tegelijk vooruit gaan. Voor het lezen en schrijven naar een container is het de meest geprefereerde iterator die hergebruik en opslaan ondersteunt. Het ondersteunt alle bovenstaande operatoren.
  • Bidirectionele Iterator (dubbel gekoppelde lijst): Zoals de naam al bidirectioneel suggereert, waardoor hij sterker is dan de bovenstaande iterators. Het ondersteunt ook lezen en schrijven naar een container. Het ondersteunt de operator Decrement (-).
  • Random Access Iterator (arrays): de sterkste iterator is de krachtigste iterator omdat deze kan lezen, schrijven en willekeurige toegang kan krijgen. Aanwijzer-achtige functionaliteit zoals de aanwijzer optellen en aftrekken.

Voordelen van Iterator in C ++

Als u van het ene element moet gaan, wijst de iterator momenteel naar een ander element dat mogelijk n stappen verwijderd is van uw huidige iterator. De eerste vier in de hiërarchie zullen een lineaire hoeveelheid tijd vergen om dat te doen, terwijl een iterator met willekeurige toegang dat in constante tijd kan doen en dat is veel fascinerender, omdat dat de tijd bespaart. Het is de belangrijkste functie die een Iterator biedt. Enkele meer worden hieronder vermeld

  • Code-efficiëntie: als we P-soorten containers met gegevens hebben en Q-dingen die we ermee willen doen, zullen we uiteindelijk P * Q-algoritmen schrijven. Als de gegevens ook van verschillende R-typen zijn, kunnen we eindigen met het P * Q * R-algoritme. Dus door de iterators te gebruiken, kunnen we het doen in het P + Q-algoritme. We hebben 90% van de tijd en het werk bespaard. Efficiëntie van code naar het volgende niveau brengen. Het concept achter efficiëntie is dat input-iterator over bron en output-iterator over de doelsequentie niet van hetzelfde type hoeft te zijn.
  • Dynamische verwerking: Iterators hebben dynamische functionaliteiten zoals swapping in dezelfde container, Copy-toewijsbaar, incrementing, dereferencing en decrementing. De iterator biedt de functionaliteit om elementen aan de container te verwijderen en dynamisch toe te voegen. Omdat alle iterators kunnen worden verhoogd, kunnen input-iterators worden vergeleken en van een waarde worden afgeleid. Bidirectionele iterators kunnen worden verlaagd. Het belangrijkste is om één functie te schrijven en deze voor elke container te gebruiken.

Nadelen van Iterator in C ++

  • U kunt op een complexe manier niet tegelijkertijd van de ene gegevensstructuur naar de andere gaan. Iterator zal in dat geval niet werken.
  • Als u een lijst doorloopt en u bent iets vergeten en nu wilt u teruggaan, kunt u dat niet, omdat iterators niet op die manier werken.
  • Als u de structuur moet bijwerken tijdens het doorlopen, kunt u dat ook niet doen vanwege de iterator-manier om de positie op te slaan.

Conclusie

Houd tijdens het gebruik van iterators altijd rekening met deze twee dingen om code efficiënt te maken. Geef de iterator altijd een functie in plaats van containers. U mag nooit containers in plaats van retour of iterator retourneren. Je kunt elk element krijgen met een iterator, dereferentie en een paar iterators doorgeven aan een algoritme

Aanbevolen artikelen

Dit is een handleiding voor de Iterator in C ++. Hier bespreken we bewerkingen in de iterator, categorieën, voor- en nadelen met codes en uitgangen. U kunt ook onze andere gerelateerde artikelen doornemen voor meer informatie-

  1. Arrays in C ++
  2. Wat is C ++
  3. C ++ Array Functies
  4. Lussen in C ++
  5. PHP-arrayfuncties | Soorten array-functies in PHP