std::list in C++ mit Beispiel
Was ist eine std::list?
In C++, die std::list bezieht sich auf einen Speichercontainer. Die std:list ermรถglicht das Einfรผgen und Entfernen von Elementen von รผberall. Die std::list ist als doppelt verknรผpfte Liste implementiert. Das bedeutet, dass auf Listendaten bidirektional und sequenziell zugegriffen werden kann.
Die Liste der Standardvorlagenbibliothek unterstรผtzt keinen schnellen Direktzugriff, aber 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.
Warum std::list verwenden?
Hier sind die Grรผnde fรผr die Verwendung von std::List:
- Die std::list ist im Vergleich zu anderen Sequenzcontainern wie Array und Vektor besser.
- 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.
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 jeden Datentyp ersetzen, auch durch benutzerdefinierte Typen.
- Alloc โ Definiert den Typ des Allocator-Objekts. Hierbei wird standardmรครig die Allocator-Klassenvorlage verwendet. Es ist wertabhรคngig und verwendet ein einfaches Speicherzuweisungsmodell.
Beispiele 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 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 des 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 das demonstrieren:
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.
Aus einer Liste lรถschen
Es ist mรถglich, Elemente aus einer Liste zu lรถschen. Mit der Funktion erase() kรถnnen Sie ein Element oder eine Reihe von Elementen aus einer Liste 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, รผbergeben Sie den Start- und den End-Iterator. Lassen Sie uns das demonstrieren.
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.
Zusammenfassung
- Die std::list ist ein Speichercontainer.
- Es ermรถglicht das Einfรผgen und Lรถschen von Elementen von รผberall und zu konstanter Zeit.
- Es ist als Double-Link implementiert
- Auf die std::list-Daten kann bidirektional und sequentiell zugegriffen werden.
- std::list unterstรผtzt keinen schnellen Direktzugriff. Es unterstรผtzt jedoch den sequentiellen Zugriff aus allen Richtungen.
- Sie kรถnnen Listenelemente von std::list in verschiedenen Speicherblรถcken verteilen.
- Sie kรถnnen std::list von beiden Enden nach Bedarf wรคhrend der Laufzeit verkleinern oder erweitern.
- Um Elemente in std::list einzufรผgen, verwenden wir die Funktion insert().
- Um Elemente aus der std::list zu lรถschen, verwenden wir die Funktion erase().






