Einführung in Iterator in C ++

Durch den Iterator in C ++, einer Komponente der Standard Template Library (STL), ist es möglich, Ihre hochkomplexen Daten, die in verschiedenen Arten von Containern wie Arrays, Vektoren usw. gespeichert sind, in kürzester Ausführungszeit zu durchsuchen. Machen Sie sich keine Sorgen, es ist nur ein Zeiger wie ein Objekt, aber es ist klug, da es nicht darauf ankommt, welchen Container Sie verwenden. Es macht Ihren Algorithmus unabhängig vom Containertyp, indem es eine gemeinsame Schnittstelle für alle Containertypen wie eine Brücke zwischen beiden bereitstellt Algorithmus und Container. Iterator reduziert nicht nur die Komplexität eines Programms, sondern verkürzt auch die Ausführungszeit erheblich.

Beispielsweise führt der sort () - Algorithmus, der zwei Parameter hat, einen End- und einen Start-Iterator, die Sortierung in der Reihenfolge durch, unabhängig davon, welchen Containertyp Sie verwenden. Iterator ermöglicht die Anwendung generischer Algorithmen auf Datenstrukturen. Datenstrukturen können einen Iterator verwenden, um eine Reihe von Elementen verfügbar zu machen.

Operationen mit dem Iterator

  • begin (): Diese Funktion gibt einen Iterator zurück, der auf das erste Element des Containers zeigt.
  • end (): Diese Funktion gibt einen Iterator zurück, der auf das letzte Element des Containers zeigt.
  • advance (): Diese Funktion erhöht eine Iteratorposition auf das angegebene Argument.
  • next (): Diese Funktion gibt den neuen Iterator zurück, auf den der Iterator zeigt, nachdem die Positionen in den Argumenten erhöht wurden.
  • previous (): Diese Funktion gibt den neuen Iterator zurück, auf den der Iterator zeigt, nachdem die Positionen in den Argumenten dekrementiert wurden.
  • inserter (): Diese Funktion fügt das Element an einer beliebigen Position im Container ein.

Praktische Anwendung

1. C ++ - Code zum Implementieren des Iterators

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

Ausgabe:

2. C ++ - Code zum Anzeigen der Iteratorfunktionalität

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

Ausgabe:

Iteratorkategorien

Ab C ++ 17 gibt es 5 verschiedene Arten von Iteratoren, die abhängig von der Art der Funktionalität klassifiziert werden können (siehe Flussdiagramm unten):

  • Eingabe-Iterator (stdin) : Aufgrund der eingeschränkten Funktionalität sind sie die schwächsten aller Iteratoren mit schreibgeschützter und vorwärts bewegter Funktionalität. Der Containerwert kann nicht geändert werden. Als Eingabe-Iteratoren können der Dereferenzierungsoperator (*), der Nicht-Gleichheitsoperator (! =), Der Inkrementierungsoperator (++) und der Gleichheitsoperator (==) verwendet werden. Auch für sequentielle Eingabeoperationen.
  • Ausgabe-Iterator (stdout): Iterator nur zum Speichern, Iterator nur zum Schreiben, der zum Ändern des Werts eines Containers verwendet wird. Sie haben auch sehr eingeschränkte Funktionalität. Iterator kann nicht auf das Element zugreifen. Der Zuweisungsoperator (=) und der Inkrementierungsoperator (++) können als Ausgabe-Iteratoren verwendet werden. Nur in einem Single-Pass-Algorithmus.
  • Forward-Iterator (einfach verknüpfte Liste): Dieser Iterator enthält die Funktionen von Eingabe- und Ausgabe-Iteratoren. Es kann sich schrittweise vorwärts bewegen. Zum Lesen und Schreiben in einen Container ist dies der am meisten bevorzugte Iterator, der die Wiederverwendung und Speicherung unterstützt. Es unterstützt alle oben genannten Operatoren.
  • Bidirektionaler Iterator (doppelt verknüpfte Liste): Wie der Name bereits andeutet, ist er bidirektional und damit stärker als die obigen Iteratoren. Es unterstützt auch das Lesen und Schreiben in einen Container. Es unterstützt den Dekrementierungsoperator (-).
  • Iterator mit wahlfreiem Zugriff (Arrays): Der stärkste Iterator ist der leistungsstärkste Iterator, da er lesen, schreiben und wahlfrei zugreifen kann. Zeiger-ähnliche Funktionen wie das Hinzufügen und Entfernen von Zeigern.

Vorteile von Iterator in C ++

Wenn Sie von einem Element, auf das der Iterator gerade zeigt, zu einem anderen Element wechseln müssen, das möglicherweise n Schritte von Ihrem aktuellen Iterator entfernt ist. Die ersten vier in der Hierarchie benötigen dafür linear viel Zeit, während ein Iterator mit wahlfreiem Zugriff dies in konstanter Zeit tun kann, und das ist weitaus faszinierender, da hier Zeit gespart wird. Dies ist die wichtigste Funktion, die ein Iterator bietet. Einige weitere sind unten aufgeführt

  • Code-Effizienz: Wenn wir P-Arten von Datencontainern und Q-Dinge haben, die wir damit machen wollen, werden wir am Ende P * Q-Algorithmen schreiben. Wenn die Daten auch von R verschiedenen Typen sind, könnten wir mit dem P * Q * R-Algorithmus enden. Mit den Iteratoren können wir dies also im P + Q-Algorithmus tun. Wir haben 90% der Zeit und der Arbeit gespart. Steigern Sie die Effizienz von Code. Das Konzept hinter Effizienz ist, dass Eingabe-Iterator über Quelle und Ausgabe-Iterator über die Zielsequenz nicht vom gleichen Typ sein müssen.
  • Dynamische Verarbeitung: Iteratoren verfügen über dynamische Funktionen wie das Austauschen im selben Container, Zuweisen von Kopien, Inkrementieren, Dereferenzieren und Dekrementieren. Der Iterator bietet die Funktionalität zum Entfernen und dynamischen Hinzufügen von Elementen zum Container. Da alle Iteratoren erhöht werden können, können Eingabe-Iteratoren verglichen und auf einen Wert dereferenziert werden. Bidirektionale Iteratoren können dekrementiert werden. Der Hauptaspekt besteht darin, eine Funktion zu schreiben und für einen beliebigen Container zu verwenden.

Nachteile von Iterator in C ++

  • Sie können nicht auf komplexe Weise gleichzeitig von einer Datenstruktur in eine andere wechseln. Iterator funktioniert in diesem Fall nicht.
  • Wenn Sie eine Liste durcharbeiten und etwas vergessen haben und jetzt zurückkehren möchten, können Sie dies nicht, da Iteratoren nicht auf diese Weise funktionieren.
  • Falls Sie die Struktur während des Verfahrens aktualisieren müssen, können Sie dies auch nicht tun, da die Position durch den Iterator gespeichert wird.

Fazit

Beachten Sie bei der Verwendung von Iteratoren diese beiden Punkte, um den Code effizienter zu gestalten. Übergeben Sie den Iterator immer in eine Funktion anstelle von Containern. Sie sollten niemals Container zurückgeben, anstatt sie zurückzugeben oder Iterator zu passieren. Sie können jedes Element mit einem Iterator abrufen, dereferenzieren und ein Paar des Iterators an einen Algorithmus übergeben

Empfohlene Artikel

Dies ist eine Anleitung zum Iterator in C ++. Hier diskutieren wir Operationen im Iterator, Kategorien, Vor- und Nachteile mit Codes und Ausgaben. Sie können auch unsere anderen verwandten Artikel durchgehen, um mehr zu erfahren.

  1. Arrays in C ++
  2. Was ist C ++?
  3. C ++ - Array-Funktionen
  4. Schleifen in C ++
  5. PHP Array Funktionen | Arten von Array-Funktionen in PHP