std::list in C++ mit Beispiel
⚡ Intelligente Zusammenfassung
std::list in C++ ist ein Sequenzcontainer, der als doppelt verkettete Liste implementiert ist und schnelles Einfügen und Löschen an jeder Position ermöglicht, während Elemente in nicht zusammenhängendem Speicher gespeichert werden und bidirektionaler sequenzieller Zugriff anstelle von wahlfreiem Zugriff unterstützt wird.
Was ist eine std::list?
In C++Die `std::list` ist ein Datenspeicher. Mit ihr lassen sich Elemente an beliebiger Stelle einfügen und entfernen. Die `std::list` ist als doppelt verkettete Liste implementiert. Das bedeutet, dass auf die Listendaten bidirektional und sequenziell zugegriffen werden kann.
Die Liste der Standard Template Library unterstützt keinen schnellen Direktzugriff, aber sie unterstützt sequenziellen Zugriff aus allen Richtungen.
Sie können Listenelemente in verschiedenen Speicherblöcken verteilen. Die für den sequentiellen Zugriff auf Daten erforderlichen Informationen werden in einem Container gespeichert. Die std::list kann zur Laufzeit nach Bedarf an beiden Enden erweitert und verkleinert werden. Ein interner Allokator erfüllt automatisch die Speicheranforderungen.
Diese Eigenschaften werfen eine praktische Frage auf: Wann sollte man tatsächlich zu einer Liste greifen?
Warum std::list verwenden?
Hier sind die Gründe für die Verwendung von std::list:
- Die std::list schneidet im Vergleich zu anderen Sequenzcontainern wie Array und Vektor besser ab.
- Sie weisen eine bessere Leistung beim Einfügen, Bewegen und Auslagern auf.tracElemente aus jeder Position einbinden.
- Auch bei Algorithmen, die solche Operationen intensiv ausführen, kommt std::list besser zurecht.
Nachdem die Gründe geklärt sind, geht es im nächsten Schritt um die Syntax, die ein solches deklariert.
Listensyntax
Um die std::list zu definieren, müssen wir die importieren Header-Datei. Hier ist die std::list-Definitionssyntax:
template < class Type, class Alloc =allocator<T> > class list;
Hier ist eine Beschreibung der oben genannten Parameter:
- T – Definiert den Typ des enthaltenen Elements. Sie können T durch einen beliebigen Datentyp ersetzen, auch durch benutzerdefinierte Typen.
- Alloc – Definiert den Typ des Allokatorobjekts. Standardmäßig wird die Allokatorklassenvorlage verwendet. Es ist wertabhängig und verwendet ein einfaches Speicherverwaltungsmodell.
Beispiel 1
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; for (int x : my_list) { std::cout << x << '\n'; } }
Ausgang:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- Fügen Sie die Algorithmus-Header-Datei ein, um ihre Funktionen zu nutzen.
- Fügen Sie die iostream-Headerdatei ein, um ihre Funktionen zu nutzen.
- Fügen Sie die Listenheaderdatei ein, um ihre Funktionen zu nutzen.
- Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil dieser Funktion hinzugefügt werden.
- Erstellen Sie eine Liste mit dem Namen my_list mit einem Satz von 4 Ganzzahlen.
- Verwenden for-Schleife Um eine Schleifenvariable x zu erstellen. Diese Variable wird verwendet, um die Listenelemente zu durchlaufen.
- Drucken Sie die Werte der Liste auf der Konsole aus.
- Ende des Körpers der for-Schleife.
- Ende des Hauptteils der main()-Funktion.
C++ Listenfunktionen
Hier sind die allgemeinen std::list-Funktionen:
| Funktion | Beschreibung |
|---|---|
| einfügen() | Diese Funktion fügt ein neues Element vor der Position ein, auf die der Iterator zeigt. |
| push_back() | Diese Funktion fügt am Ende der Liste ein neues Element hinzu. |
| push_front() | Es fügt ein neues Element am Anfang der Liste hinzu. |
| pop_front() | Es löscht das erste Element der Liste. |
| Größe() | Diese Funktion ermittelt die Anzahl der Listenelemente. |
| Vorderseite() | Bestimmt die ersten Elemente der Liste. |
| zurück() | Bestimmt das letzte Element der Liste. |
| umkehren() | Es kehrt die Listenelemente um. |
| verschmelzen() | Es führt zwei sortierte Listen zusammen. |
Konstrukteure
Hier ist die Liste von Funktionen bereitgestellt von der Header-Datei:
- Standardkonstruktor std::list::list() – Er erstellt eine leere Liste mit null Elementen.
- Füllkonstruktor std::list::list() – Er erstellt eine Liste mit n Elementen und weist jedem Element den Wert Null (0) zu.
- Bereichskonstruktor std::list::list() – erstellt eine Liste mit vielen Elementen im Bereich vom ersten bis zum letzten.
- Kopierkonstruktor std::list::list() – Er erstellt eine Liste mit einer Kopie jedes Elements, das in der vorhandenen Liste enthalten ist.
- Move-Konstruktor std::list::list() – erstellt eine Liste mit den Elementen einer anderen Liste mithilfe der Move-Semantik.
- Initialisierungslistenkonstruktor std::list::list() – Er erstellt eine Liste mit den Elementen einer anderen Liste mithilfe der Verschiebungssemantik.
Beispiel 2
#include <iostream> #include <list> using namespace std; int main(void) { list<int> l; list<int> l1 = { 10, 20, 30 }; list<int> l2(l1.begin(), l1.end()); list<int> l3(move(l1)); cout << "Size of list l: " << l.size() << endl; cout << "List l2 contents: " << endl; for (auto it = l2.begin(); it != l2.end(); ++it) cout << *it << endl; cout << "List l3 contents: " << endl; for (auto it = l3.begin(); it != l3.end(); ++it) cout << *it << endl; return 0; }
Ausgang:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- Fügen Sie die iostream-Headerdatei ein, um ihre Funktionen zu nutzen.
- Fügen Sie die Listenheaderdatei ein, um ihre Funktionen zu nutzen.
- Fügen Sie den std-Namespace in den Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil dieser Funktion hinzugefügt werden.
- Erstellen Sie eine leere Liste mit dem Namen l.
- Erstellen Sie eine Liste mit dem Namen l1 mit einer Menge von 3 Ganzzahlen.
- Erstellen Sie eine Liste mit dem Namen l2 mit allen Elementen in der Liste mit dem Namen l1, vom Anfang bis zum Ende.
- Erstellen Sie mithilfe der Verschiebungssemantik eine Liste mit dem Namen l3. Die Liste l3 hat denselben Inhalt wie die Liste l2.
- Geben Sie die Größe der Liste mit dem Namen l zusammen mit anderem Text auf der Konsole aus.
- Drucken Sie einen Text auf der Konsole.
- Erstellen Sie einen Iterator mit dem Namen it und verwenden Sie ihn, um die Elemente der Liste mit dem Namen l2 zu durchlaufen.
- Drucken Sie die Elemente der Liste mit dem Namen l2 auf der Konsole aus.
- Drucken Sie einen Text auf der Konsole.
- Erstellen Sie einen Iterator mit dem Namen it und verwenden Sie ihn, um die Elemente der Liste mit dem Namen l3 zu durchlaufen.
- Drucken Sie die Elemente der Liste mit dem Namen l3 auf der Konsole aus.
- Das Programm muss bei erfolgreichem Abschluss einen Wert zurückgeben.
- Ende des Hauptteils der main()-Funktion.
Containereigenschaften
Hier ist die Liste der Containereigenschaften:
| Eigenschaft | Beschreibung |
|---|---|
| Reihenfolge | Sequenzcontainer ordnen ihre Elemente in einer streng linearen Reihenfolge. Der Zugriff auf Elemente erfolgt über ihre Position in der Sequenz. |
| Doppelt verlinkte Liste | Jedes Element verfügt über Informationen zum Auffinden vorheriger und nächster Elemente. Dadurch bleibt die Zeit für Einfüge- und Löschvorgänge konstant. |
| Allokatorbewusst | Ein Allokatorobjekt wird zum dynamischen Ändern der Speichergröße verwendet. |
Einfügen in eine Liste
Es gibt verschiedene Funktionen, mit denen wir Werte in eine Liste einfügen können. Lassen Sie uns dies veranschaulichen:
Beispiel 3
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; my_list.push_front(11); my_list.push_back(18); auto it = std::find(my_list.begin(), my_list.end(), 10); if (it != my_list.end()) { my_list.insert(it, 21); } for (int x : my_list) { std::cout << x << '\n'; } }
Ausgang:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- Fügen Sie die Algorithmus-Header-Datei ein, um ihre Funktionen zu nutzen.
- Fügen Sie die iostream-Headerdatei ein, um ihre Funktionen zu nutzen.
- Fügen Sie die Listenheaderdatei ein, um ihre Funktionen zu nutzen.
- Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil dieser Funktion hinzugefügt werden.
- Erstellen Sie eine Liste mit dem Namen my_list mit einem Satz von 4 Ganzzahlen.
- Fügen Sie das Element 11 am Anfang der Liste mit dem Namen my_list ein.
- Fügen Sie Element 18 am Ende der Liste mit dem Namen my_list ein.
- Erstellen Sie einen Iterator und verwenden Sie ihn, um das Element 10 aus der Liste my_list zu finden.
- Verwenden Sie eine if-Anweisung, um festzustellen, ob das obige Element gefunden wurde oder nicht.
- Fügen Sie Element 21 vor dem obigen Element ein, falls es gefunden wurde.
- Ende des Hauptteils der if-Anweisung.
- Verwenden Sie eine for-Schleife, um eine Schleifenvariable x zu erstellen. Diese Variable wird zum Durchlaufen der Listenelemente verwendet.
- Drucken Sie die Werte der Liste auf der Konsole aus.
- Ende des Körpers der for-Schleife.
- Ende des Hauptteils der main()-Funktion.
Elemente, die in eine Liste aufgenommen werden, können genauso leicht wieder entfernt werden.
Aus einer Liste löschen
Es ist möglich, Elemente aus einer Liste zu löschen. Die Funktion erase() ermöglicht es Ihnen, ein einzelnes Element oder einen Bereich von Elementen aus einer Liste zu löschen.
- Um ein einzelnes Element zu löschen, übergeben Sie einfach eine ganzzahlige Position. Der Artikel wird gelöscht.
- Um einen Bereich zu löschen, übergibt man den Start- und den Enditerator. Wir zeigen Ihnen das.
Beispiel 4
#include <algorithm> #include <iostream> #include <list> using namespace std; int main() { std::list<int> my_list = { 12, 5, 10, 9 }; cout << "List elements before deletion: "; for (int x : my_list) { std::cout << x << '\n'; } list<int>::iterator i = my_list.begin(); my_list.erase(i); cout << "\nList elements after deletion: "; for (int x : my_list) { std::cout << x << '\n'; } return 0; }
Ausgang:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- Fügen Sie die Algorithmus-Header-Datei ein, um ihre Funktionen zu nutzen.
- Fügen Sie die iostream-Headerdatei ein, um ihre Funktionen zu nutzen.
- Fügen Sie die Listenheaderdatei ein, um ihre Funktionen zu nutzen.
- Fügen Sie den std-Namespace in unser Programm ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil dieser Funktion hinzugefügt werden.
- Erstellen Sie eine Liste mit dem Namen my_list mit einem Satz von 4 Ganzzahlen.
- Drucken Sie einen Text auf der Konsole.
- Verwenden Sie eine for-Schleife, um eine Schleifenvariable x zu erstellen. Diese Variable wird zum Durchlaufen der Listenelemente verwendet.
- Drucken Sie die Werte der Liste auf der Konsole aus.
- Ende des Körpers der for-Schleife.
- Erstellen Sie einen Iterator i, der auf das erste Element der Liste zeigt.
- Verwenden Sie die Funktion erase(), auf die der Iterator i zeigt.
- Drucken Sie einen Text auf der Konsole.
- Verwenden Sie eine for-Schleife, um eine Schleifenvariable x zu erstellen. Diese Variable wird zum Durchlaufen der Listenelemente verwendet.
- Drucken Sie die Werte der Liste auf der Konsole aus. Dies geschieht nach dem Löschen.
- Ende des Körpers der for-Schleife.
- Das Programm muss bei erfolgreichem Abschluss einen Wert zurückgeben.
- Ende des Hauptteils der main()-Funktion.







