Utilice el contenedor de lista STL en C++ STL

Jinku Hu 12 octubre 2023
  1. Utilice std::list<T> para declarar un objeto contenedor de lista en C++
  2. Utilice la función insert() para insertar elementos en la ubicación especificada en la lista en C++
  3. Utilice la función swap() para intercambiar elementos de dos listas en C++
  4. Utilice la función merge() para unir dos listas ordenadas en una
Utilice el contenedor de lista STL en C++ STL

Este artículo demostrará varios métodos sobre cómo usar el contenedor STL list en C++.

Utilice std::list<T> para declarar un objeto contenedor de lista en C++

El contenedor std::list es parte de la biblioteca de plantillas estándar e implementa una estructura de datos de lista que proporciona inserción / eliminación constante de elementos desde cualquier posición. Por lo general, se implementa como una lista doblemente enlazada y admite la iteración bidireccional en lugar de std::forward_list. En el lado negativo, std::list no está equipado para tener acceso aleatorio rápido a elementos como los que tienen std::vector o std::deque. Proporciona solo dos funciones de tiempo constante, front y back para acceder al primer y último elemento. std::list se puede inicializar con el tipo de datos dado y la notación de lista de inicializador común como se muestra en el siguiente código de ejemplo. Los métodos push_back y push_front se pueden utilizar para agregar elementos a cualquier lado de la lista.

#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;
}

Producción :

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

Utilice la función insert() para insertar elementos en la ubicación especificada en la lista en C++

La función miembro insert() se puede utilizar para agregar elementos en una posición determinada. La función tiene múltiples sobrecargas, la primera de las cuales solo toma dos argumentos: el iterador y la referencia al objeto. El elemento dado se inserta antes del elemento al que apunta el iterador. El siguiente fragmento de código muestra cómo encontrar el valor específico en la lista y luego insertar el elemento deseado antes.

#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;
}

Producción :

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

Utilice la función swap() para intercambiar elementos de dos listas en C++

Otra función miembro útil del contenedor std::list es swap() que intercambia los elementos del objeto de lista con otra lista que se pasa como único argumento. Tenga en cuenta que esta operación no mueve ni copia elementos individuales y todos los iteradores/referencias siguen siendo válidos después de la llamada a la función.

#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;
}

Producción :

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

Utilice la función merge() para unir dos listas ordenadas en una

Alternativamente, uno puede unir elementos de dos listas ordenadas en una usando la función de miembro merge. Tenga en cuenta que ambas listas deben ordenarse en orden ascendente. merge hace referencia al objeto de lista, cuyos elementos se fusionan con el objeto de llamada. Después de la operación, el objeto de lista que se pasa como argumento queda vacío. La función ordena los elementos del objeto de lista resultante en orden ascendente, como se muestra en el siguiente ejemplo de código.

#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;
}

Producción :

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

Artículo relacionado - C++ List