Verwendung des STL-Listencontainer in C++ STL

Jinku Hu 12 Oktober 2023
  1. Verwendung von std::list<T> zur Deklaration von Listen-Container-Objekten in C++
  2. Verwenden der Funktion insert() zum Einfügen von Elementen an einer bestimmten Stelle in der Liste in C++
  3. Verwenden der Funktion swap() zum Vertauschen von Elementen zweier Listen in C++
  4. Verwenden der Funktion merge() zum zwei sortierte Listen zu einer zusammenzuführen
Verwendung des STL-Listencontainer in C++ STL

Dieser Artikel demonstriert mehrere Methoden, wie man den STL list-Container in C++ verwendet.

Verwendung von std::list<T> zur Deklaration von Listen-Container-Objekten in C++

Der Container std::list ist Teil der Standard-Vorlagenbibliothek und implementiert eine Listendatenstruktur, die ein zeitkonstantes Einfügen/Entfernen von Elementen an jeder Position ermöglicht. Sie wird normalerweise als doppelt verkettete Liste implementiert und unterstützt bidirektionale Iteration im Gegensatz zu std::forward_list. Auf der anderen Seite ist std::list nicht dafür ausgestattet, schnellen Zufallszugriff auf Elemente wie std::vector oder std::deque zu haben. Es bietet nur zwei konstante Zeitfunktionen, front und back, um auf das erste und das letzte Element zuzugreifen. std::list kann mit dem angegebenen Datentyp und der üblichen Initialisierungslisten-Notation initialisiert werden, wie im folgenden Beispielcode demonstriert. Die Methoden push_back und push_front können verwendet werden, um Elemente zu beiden Seiten der Liste hinzuzufügen.

#include <algorithm>
#include <iostream>
#include <list>

using std::cout;
using std::endl;
using std::list;

template <typename T>
void printList(list<T> l) {
  for (const auto &item : l) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  std::list<int> l1 = {11, 12, 13, 14};

  l1.push_front(15);
  printList(l1);
  l1.push_back(16);
  printList(l1);

  return EXIT_SUCCESS;
}

Ausgabe:

15; 11; 12; 13; 14;
15; 11; 12; 13; 14; 16;

Verwenden der Funktion insert() zum Einfügen von Elementen an einer bestimmten Stelle in der Liste in C++

Die Memberfunktion insert() kann verwendet werden, um Elemente an einer bestimmten Position hinzuzufügen. Die Funktion verfügt über mehrere Überladungen, von denen die erste nur zwei Argumente benötigt: den Iterator und den Verweis auf das Objekt. Das angegebene Element wird vor dem Element eingefügt, auf das der Iterator zeigt. Das nächste Code-Snippet zeigt, wie Sie den spezifischen Wert in der Liste finden und dann das gewünschte Element davor einfügen.

#include <algorithm>
#include <iostream>
#include <list>

using std::cout;
using std::endl;
using std::list;

template <typename T>
void printList(list<T> l) {
  for (const auto &item : l) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  std::list<int> l1 = {11, 12, 13, 14};

  printList(l1);
  auto iter = std::find(l1.begin(), l1.end(), 13);
  if (iter != l1.end()) {
    l1.insert(iter, 55);
  }
  printList(l1);

  return EXIT_SUCCESS;
}

Ausgabe:

11; 12; 13; 14;
11; 12; 55; 13; 14;

Verwenden der Funktion swap() zum Vertauschen von Elementen zweier Listen in C++

Eine weitere nützliche Memberfunktion des Containers std::list ist swap(), die die Elemente des Listenobjekts mit einer anderen Liste austauscht, die als einziges Argument übergeben wird. Beachten Sie, dass diese Operation keine einzelnen Elemente verschiebt oder kopiert und alle Iteratoren/Referenzen nach dem Funktionsaufruf gültig bleiben.

#include <algorithm>
#include <iostream>
#include <list>

using std::cout;
using std::endl;
using std::list;

template <typename T>
void printList(list<T> l) {
  for (const auto &item : l) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  std::list<int> l1 = {11, 12, 13, 14};
  std::list<int> l2 = {1, 2, 3, 4, 11};

  cout << "l2: ";
  printList(l2);
  l2.swap(l1);
  cout << "l2: ";
  printList(l2);

  return EXIT_SUCCESS;
}

Ausgabe:

l2: 1; 2; 3; 4; 11;
l2: 11; 12; 13; 14;

Verwenden der Funktion merge() zum zwei sortierte Listen zu einer zusammenzuführen

Alternativ kann man mit der Member-Funktion merge Elemente zweier sortierter Listen zu einer zusammenfügen. Beachten Sie, dass beide Listen in aufsteigender Reihenfolge sortiert werden sollten. merge nimmt eine Referenz auf das Listenobjekt, dessen Elemente mit dem Aufrufer-Objekt zusammengeführt werden. Nach der Operation wird das als Argument übergebene Listenobjekt leer. Die Funktion sortiert die Elemente des resultierenden Listenobjekts in aufsteigender Reihenfolge, wie im folgenden Codebeispiel gezeigt.

#include <algorithm>
#include <iostream>
#include <list>

using std::cout;
using std::endl;
using std::list;

template <typename T>
void printList(list<T> l) {
  for (const auto &item : l) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  std::list<int> l1 = {8, 10, 2, 4};
  std::list<int> l2 = {7, 3, 9, 5, 1};

  l2.sort();
  l1.sort();
  cout << "l2: ";
  printList(l2);

  l2.merge(l1);

  cout << "l2: ";
  printList(l2);

  return EXIT_SUCCESS;
}

Ausgabe:

l2: 1; 3; 5; 7; 9;
l2: 1; 2; 3; 4; 5; 7; 8; 9; 10;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ List