logo

Weiterleitungsliste in C++ STL

Forward_list Container stellt die Implementierung von bereit einfach verknüpfte Liste Datenstruktur. Es speichert Daten im nicht zusammenhängenden Speicher, wobei jedes Element auf das nächste Element in der Sequenz zeigt. Dies beschleunigt das Einfügen und Löschen, sobald die Position des Elements bekannt ist.

Syntax

Weiterleitungsliste ist definiert als std::forward_list Klassenvorlage innerhalb der< vorwärts_liste > Header-Datei.



vorwärts_listefl;

ein Array in Java

Wo

  • T: Datentyp der Elemente in der Vorwärtsliste.
  • F: Der der Weiterleitungsliste zugewiesene Name.

Deklaration und Initialisierung

Eine „forward_list“ kann auf verschiedene Arten deklariert und initialisiert werden, wie im folgenden Beispiel gezeigt:



C++
#include    using namespace std; void printFL(forward_list<int>& fl) {  for (auto i : fl)  cout << i << ' ';  cout << 'n'; } int main() {    // Creating an empty forward_list  forward_list<int> fl1;  // Creating a forward_list with  // default value  forward_list<int> fl2(3 4);    // Creating a forward_list from an  // initializer list  forward_list<int> fl3 = {1 5 3 4};    printFL(fl2);  printFL(fl3);  return 0; } 

Ausgabe
4 4 4 1 5 3 4 

Beispiel: Im obigen Programm initialisieren wir die Vorwärtsliste einfach auf drei Arten:

  • Stellungnahme vorwärts_liste FL1 Erstellt eine leere Vorwärtsliste von Ganzzahlen.
  • Stellungnahme vorwärts_liste fl2(34) Erstellt eine Vorwärtsliste der Größe 3 und jedes Element ist 4.
  • Stellungnahme vorwärts_liste fl3 = {1 5 3 4} erstellt eine Vorwärtsliste und initialisiert mit den Elementen aus der Initialisierungsliste.

Grundlegende Operationen

Hier sind die grundlegenden Operationen, die wir für eine Weiterleitungsliste ausführen können:

1. Auf Elemente zugreifen

Auf die Elemente der Vorwärtsliste kann nicht über Indizes wie Arrays oder Vektoren zugegriffen werden. Wir müssen die Liste der Reihe nach vom Anfang bis zur gewünschten Position durchgehen, um darauf zuzugreifen. Dies kann durch Inkrementieren erfolgen beginnen() Iterator, aber es ist besser zu verwenden nächste() oder Vorauszahlung() Funktion.



Auf das erste Element der Liste kann jedoch leicht zugegriffen werden Front() Verfahren.

Beispiel:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Access the first element  cout << fl.front() << endl;    // Access third element  auto it = next(fl.begin() 2);  cout << *it;  return 0; } 

Ausgabe
1 3

Beispiel: Im obigen Programm wird das erste Element mit gedruckt Front() Verfahren. Um auf das dritte Element zuzugreifen nächste() wird verwendet, um den Iterator um zwei Positionen vom Anfang zu verschieben und *Es wird verwendet, um den Iterator zu dereferenzieren.

2. Elemente einfügen

Elemente können mit in die Vorwärtsliste eingefügt werden insert_after() Funktion. Es benötigt den Iterator, nach dem das Element eingefügt werden soll. Allerdings wird das schnelle Einsetzen an der Vorderseite durch unterstützt push_front() Verfahren.

Beispiel:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {5 4};  // Inserting Element at front  fl.push_front(1);    // Insert 3 after the second element  auto it = fl.begin();  advance(it 1);  fl.insert_after(it 3);    for (auto x: fl) cout << x << ' ';  return 0; } 

Ausgabe
1 5 3 4 

Erläuterung: In diesem Programm wird das erste Element der Forward_list vorne mit eingefügt push_front() Funktion. Dann wird ein Iterator erstellt und mit dem um eine Position nach vorne verschoben Vorauszahlung() Funktion. Danach das Element 5 wird nach dem zweiten Element mit eingefügt insert_after() Funktion.

3. Elemente aktualisieren

Der Wert vorhandener Elemente kann einfach durch Zugriff und Verwendung geändert werden Zuweisungsoperator um den neuen Wert zuzuweisen.

Beispiel:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Updating first element  fl.front() = 111;  cout << fl.front() << endl;    // Updating third element  auto it = next(fl.begin() 2);  *it = 333;  cout << *it;  return 0; } 

Ausgabe
111 333

4. Element finden

Die Vorwärtsliste bietet keine Mitgliedsfunktion zum Suchen nach einem Element, wir können jedoch die verwenden finden() Algorithmus, um einen beliebigen Wert zu finden.

Beispiel :

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Finding 3  auto it = find(fl.begin() fl.end() 3);    if (it != fl.end()) cout << *it;  else cout << 'Element not Found';  return 0; } 

Ausgabe
3

5. Überqueren

Eine Vorwärtsliste kann mit durchlaufen werden beginnen() Und Ende() Iteratoren mit einer Schleife, aber wir können uns nur vorwärts und nicht rückwärts bewegen.

Beispiel:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};    // Traversing using range-based for loop  for(auto i : fl)  cout << i << ' ';  cout << endl;    return 0; } 

Ausgabe
1 5 3 4 

6. Elemente löschen

In der Vorwärtsliste können wir das Element an der angegebenen Position mit löschen erase_after() Verfahren. Diese Methode bringt den Iterator an eine Position vor dem Zielelement. Ein schnelles Löschen von vorne ist mit möglich pop_front() Verfahren.

Android-Versionen

Beispiel:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Delete first element  fl.pop_front();    // Delete third element  auto it = fl.begin();  advance(it 1);  fl.erase_after(it);    for (auto x: fl) cout << x << ' ';  return 0; } 

Ausgabe
5 3 

7. Größe der Weiterleitungsliste

Forward_list verfügt nicht über eine integrierte size()-Funktion. Um seine Größe zu ermitteln, müssen wir die Elemente manuell zählen, indem wir es mit einer Schleife durchlaufen oder std::distanz verwenden.

C++
#include    #include  #include    using namespace std; int main() {  forward_list<int> flist={10203040};  //Calculate size by counting elements using std:: distance  int size=distance(flist.begin()flist.end());  cout<<'Size of forward_list: '<<size<<endl;  return 0; } 

Ausgabe
Size of forward_list: 4 

8. empty()

Es wird verwendet, um zu prüfen, ob die Forward_list leer ist.
Es gibt „true“ zurück, wenn die Liste leer ist, andernfalls „false“, sodass schnell überprüft werden kann, ob der Container keine Daten enthält.

C++
#include    #include  using namespace std; int main() {  forward_list<int> flist;  if (flist.empty()) {  cout << 'The forward_list is empty.' << endl;  }  flist.push_front(10);  if (!flist.empty()) {  cout << 'The forward_list is not empty.' << endl;  }  return 0; } 

Ausgabe
The forward_list is empty. The forward_list is not empty. 

Zeitkomplexität

In der folgenden Tabelle ist die zeitliche Komplexität der oben genannten Vorgänge in der Weiterleitungsliste aufgeführt:

Betrieb Zeitkomplexität
Greifen Sie auf das erste Element zu O(1)
Zugang NrThElement An)
Vorne einsetzen O(1)
Nach einer bestimmten Position einfügen An)
Erstes Element löschen O(1)
Nach einer bestimmten Position löschen An)
Durchquerung An)

Weiterleitungsliste vs. Liste

Besonderheit

vorwärts_liste

Liste

Typ der verknüpften Liste

Einfach verknüpfte Liste

Doppelt verknüpfte Liste

Durchquerung

Kann nur vorwärts queren

Java Hallo Welt

Kann sowohl vorwärts als auch rückwärts fahren

Speichernutzung

Benötigt weniger Speicher (nur ein Zeiger pro Knoten)

Benötigt mehr Speicher (zwei Zeiger pro Knoten)

Einfügen/Löschen

Schnelles Einfügen und Löschen, jedoch nur an oder nach einer bestimmten Position

Schnelles Einfügen und Löschen überall (vor oder nach einer Position)

Unterstützte Funktionen

Begrenzt im Vergleich zur Liste (keine size(), keine Reverse-Iteratoren)

Vollständigere Schnittstelle einschließlich bidirektionaler Size()-Reverse()-Iteratoren.