Was ist eine std :: list?
In C ++ verweist die std :: list auf einen Speichercontainer. Mit der Liste std: können Sie Elemente von überall einfügen und entfernen. Die std :: list ist als doppelt verknüpfte Liste implementiert. Dies bedeutet, dass auf Listendaten bidirektional und sequentiell zugegriffen werden kann.
Die Liste der Standardvorlagenbibliothek unterstützt keinen schnellen Direktzugriff, aber sequentiellen Zugriff aus allen Richtungen.
Sie können Listenelemente in verschiedene Speicherblöcke streuen. Die für den sequentiellen Zugriff auf Daten erforderlichen Informationen werden in einem Container gespeichert. Die std :: -Liste kann zur Laufzeit an beiden Enden nach Bedarf erweitert und verkleinert werden. Ein interner Allokator erfüllt automatisch die Speicheranforderungen.
In diesem C ++ - Tutorial lernen Sie:
- Was ist eine std :: list?
- Warum std :: list verwenden?
- Listensyntax
- C ++ - Listenfunktionen
Konstruktoren - Containereigenschaften
- Einfügen in eine Liste
- Löschen aus einer Liste
Warum std :: list verwenden?
Hier sind Gründe für die Verwendung von std :: List:
- Die std :: list lässt sich besser mit anderen Sequenzcontainern wie Array und Vektor vergleichen.
- Sie bieten eine bessere Leistung beim Einfügen, Verschieben und Extrahieren von Elementen aus jeder Position.
- Die std :: list funktioniert auch besser mit Algorithmen, die solche Operationen intensiv ausführen.
Listensyntax
Um die std :: list zu definieren, müssen wir die
-Headerdatei importieren. Hier ist die std :: list-Definitionssyntax:
template < class Type, class Alloc =allocator> class list;
Hier ist eine Beschreibung der obigen 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 Allocator-Objekts.
Dies verwendet standardmäßig die Allokatorklassenvorlage. Es ist wertabhängig und verwendet ein einfaches Speicherzuweisungsmodell.
Beispiele 1:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}
Ausgabe:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- Fügen Sie die Algorithmus-Header-Datei hinzu, um ihre Funktionen zu verwenden.
- Fügen Sie die iostream-Headerdatei hinzu, um ihre Funktionen zu verwenden.
- Fügen Sie die Listenheaderdatei hinzu, um ihre Funktionen zu verwenden.
- 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 4 Ganzzahlen.
- Verwenden Sie eine 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 Körpers 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 Funktionen fügen am Ende der Liste ein neues Element hinzu. |
push_front () | Es wird ein neues Element an der Vorderseite der Liste hinzugefügt. |
pop_front () | Es löscht das erste Element der Liste. |
Größe() | Diese Funktion bestimmt 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 werden zwei sortierte Listen zusammengeführt. |
Konstruktoren
Hier ist die Liste der Funktionen, die von der
-Headerdatei bereitgestellt werden:
- Standardkonstruktor std :: list :: list () - Erstellt eine leere Liste mit null Elementen.
- Füllkonstruktor std :: list :: list () - 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 von zuerst bis zuletzt.
- Kopierkonstruktor std :: list :: list () - Erstellt eine Liste mit einer Kopie jedes in der vorhandenen Liste enthaltenen Elements.
- Verschiebungskonstruktor std :: list :: list () - Erstellt mithilfe der Verschiebungssemantik eine Liste mit den Elementen einer anderen Liste.
- Initializer-Listenkonstruktor std :: list :: list () - Erstellt mithilfe der Verschiebungssemantik eine Liste mit den Elementen einer anderen Liste.
Beispiel 2:
#include#include using namespace std;int main(void) {list
l;list l1 = { 10, 20, 30 };list l2(l1.begin(), l1.end());list 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;}
Ausgabe:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- Fügen Sie die iostream-Headerdatei hinzu, um ihre Funktionen zu verwenden.
- Fügen Sie die Listenheaderdatei hinzu, um ihre Funktionen zu verwenden.
- Fügen Sie den Standard-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 einem Satz 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 eine Liste mit dem Namen l3 mithilfe der Verschiebungssemantik. Die Liste l3 hat den gleichen Inhalt wie die Liste l2.
- Drucken Sie die Größe der Liste mit dem Namen l neben anderem Text auf der Konsole aus.
- Drucken Sie Text auf der Konsole.
- Erstellen Sie einen Iterator mit dem Namen 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.
- Drucken Sie Text auf der Konsole.
- Erstellen Sie einen Iterator mit dem Namen 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.
- Das Programm muss nach erfolgreichem Abschluss einen Wert zurückgeben.
- Ende des Körpers der main () - Funktion.
Containereigenschaften
Hier ist die Liste der Containereigenschaften:
Eigentum | Beschreibung |
Reihenfolge | Sequenzcontainer ordnen ihre Elemente in einer strengen linearen Reihenfolge an. Auf Elemente wird über ihre Position in der Sequenz zugegriffen. |
Doppelt verknüpfte Liste | Jedes Element enthält Informationen zum Auffinden vorheriger und nächster Elemente. Dies ermöglicht eine konstante Zeit für Einfüge- und Löschvorgänge. |
Allokator-bewusst | 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 demonstrieren:
Beispiel 3:
#include#include #include int main() {std::list
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';}}
Ausgabe:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- Fügen Sie die Algorithmus-Header-Datei hinzu, um ihre Funktionen zu verwenden.
- Fügen Sie die iostream-Headerdatei hinzu, um ihre Funktionen zu verwenden.
- Fügen Sie die Listenheaderdatei hinzu, um ihre Funktionen zu verwenden.
- 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 4 Ganzzahlen.
- Fügen Sie das Element 11 an den Anfang der Liste mit dem Namen my_list ein.
- Fügen Sie das 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 das Element 21 vor dem obigen Element ein, wenn es gefunden wurde.
- Ende des Hauptteils der if-Anweisung.
- Verwenden Sie eine 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 Körpers der main () - Funktion.
Löschen aus einer Liste
Es ist möglich, Elemente aus einer Liste zu löschen. Mit der Funktion erase () können Sie ein Element oder einen Bereich 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 Enditerator. Lassen Sie uns dies demonstrieren.
Beispiel 4:
#include#include #include using namespace std;int main() {std::list
my_list = { 12, 5, 10, 9 };cout << "List elements before deletion: ";for (int x : my_list) {std::cout << x << '\n';}list ::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;}
Ausgabe:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- Fügen Sie die Algorithmus-Header-Datei hinzu, um ihre Funktionen zu verwenden.
- Fügen Sie die iostream-Headerdatei hinzu, um ihre Funktionen zu verwenden.
- Fügen Sie die Listenheaderdatei hinzu, um ihre Funktionen zu verwenden.
- Nehmen Sie den Standard-Namespace in unser Programm auf, 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 4 Ganzzahlen.
- Drucken Sie Text auf der Konsole.
- Verwenden Sie eine 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.
- 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 Text auf der Konsole.
- Verwenden Sie eine 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. Dies erfolgt nach dem Löschen.
- Ende des Körpers der for-Schleife.
- Das Programm muss nach erfolgreichem Abschluss einen Wert zurückgeben.
- Ende des Körpers der main () - Funktion.
Zusammenfassung:
- Die std :: list ist ein Speichercontainer.
- Es ermöglicht das Einfügen und Löschen von Elementen von überall zu konstanter Zeit.
- Es ist als Doppelverknüpfung 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 verschiedene Speicherblöcke streuen.
- Sie können std :: list von beiden Seiten nach Bedarf zur Laufzeit verkleinern oder erweitern.
- Um Elemente in std :: list einzufügen, verwenden wir die Funktion insert ().
- Um Elemente aus der std :: -Liste zu löschen, verwenden wir die Funktion erase ().