std::lista en C++ con ejemplo

ยฟQuรฉ es una std::list?

In C++, std::list se refiere a un contenedor de almacenamiento. std:list le permite insertar y eliminar elementos desde cualquier lugar. std::list se implementa como una lista doblemente enlazada. Esto significa que se puede acceder a los datos de la lista de forma bidireccional y secuencial.

La lista de la Biblioteca de plantillas estรกndar no admite el acceso aleatorio rรกpido, pero sรญ el acceso secuencial desde todas las direcciones.

Puede distribuir elementos de la lista en diferentes fragmentos de memoria. La informaciรณn necesaria para el acceso secuencial a los datos se almacena en un contenedor. El std::list puede expandirse y reducirse desde ambos extremos segรบn sea necesario durante el tiempo de ejecuciรณn. Un asignador interno cumple automรกticamente los requisitos de almacenamiento.

ยฟPor quรฉ utilizar std::list?

Aquรญ estรกn las razones para usar std::List :

  • std::list se compara mejor con otros contenedores de secuencias como matrices y vectores.
  • Tienen un mejor rendimiento a la hora de insertar, mover y extraer elementos desde cualquier posiciรณn.
  • El std::list tambiรฉn funciona mejor con algoritmos que realizan dichas operaciones de forma intensiva.

Sintaxis de lista

Para definir std::list, tenemos que importar el archivo de encabezado . Aquรญ estรก la sintaxis de definiciรณn de std::list:

template < class Type, class Alloc =allocator<T> > class list;

Aquรญ hay una descripciรณn de los parรกmetros anteriores:

  • T: define el tipo de elemento contenido. Puede sustituir T por cualquier tipo de datos, incluso tipos definidos por el usuario.
  • Alloc: define el tipo de objeto del asignador. Esto utiliza la plantilla de clase del asignador de forma predeterminada. Depende del valor y utiliza un modelo de asignaciรณn de memoria simple.

Ejemplos 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';
	}
}

Salida:

std :: lista

Aquรญ hay una captura de pantalla del cรณdigo:

std :: lista

Explicaciรณn del cรณdigo:

  1. Incluya el archivo de encabezado del algoritmo para utilizar sus funciones.
  2. Incluya el archivo de encabezado iostream para utilizar sus funciones.
  3. Incluya el archivo de encabezado de lista para utilizar sus funciones.
  4. Llame a la funciรณn principal(). La lรณgica del programa debe agregarse dentro del cuerpo de esta funciรณn.
  5. Cree una lista llamada my_list con un conjunto de 4 nรบmeros enteros.
  6. Utilice un bucle for para crear una variable de bucle x. Esta variable se utilizarรก para iterar sobre los elementos de la lista.
  7. Imprima los valores de la lista en la consola.
  8. Fin del cuerpo del en bucle.
  9. Fin del cuerpo de la funciรณn main().

C++ Funciones de lista

Estas son las funciones std::list comunes:

Funciรณn Descripciรณn
insertar() Esta funciรณn inserta un nuevo elemento antes de la posiciรณn que seรฑala el iterador.
hacer retroceder() Esta funciรณn agrega un nuevo elemento al final de la lista.
empujar_front() Agrega un nuevo elemento al principio de la lista.
frente_pop() Elimina el primer elemento de la lista.
Talla() Esta funciรณn determina el nรบmero de elementos de la lista.
frente() Para determina los primeros elementos de la lista.
espalda() Para determina el รบltimo elemento de la lista.
contrarrestar () Invierte los elementos de la lista.
unir() Combina dos listas ordenadas.

Constructores

Aquรญ estรก la lista de funciones proporcionado por el archivo de encabezado :

  • Constructor predeterminado std::list::list()- Crea una lista vacรญa, es decir, con cero elementos.
  • Constructor de relleno std::list::list()- Crea una lista con n elementos y asigna un valor de cero (0) a cada elemento.
  • Constructor de rango std::list::list()- crea una lista con muchos elementos en el rango del primero al รบltimo.
  • Constructor de copia std::list::list()- Crea una lista con una copia de cada elemento contenido en la lista existente.
  • Constructor de movimientos std::list::list()- crea una lista con los elementos de otra lista usando la semรกntica de movimientos.
  • Constructor de lista inicializador std::list::list()-Crea una lista con los elementos de otra lista usando la semรกntica de movimiento.

Ejemplo

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

Salida:

lista de constructores

Aquรญ hay una captura de pantalla del cรณdigo:

lista de constructores

Explicaciรณn del cรณdigo:

  1. Incluya el archivo de encabezado iostream para utilizar sus funciones.
  2. Incluya el archivo de encabezado de lista para utilizar sus funciones.
  3. Incluya el espacio de nombres estรกndar en el cรณdigo para usar sus clases sin llamarlo.
  4. Llame a la funciรณn principal(). La lรณgica del programa debe agregarse dentro del cuerpo de esta funciรณn.
  5. Crea una lista vacรญa llamada l.
  6. Crea una lista llamada l1 con un conjunto de 3 nรบmeros enteros.
  7. Cree una lista llamada l2 con todos los elementos de la lista llamada l1, desde el principio hasta el final.
  8. Cree una lista llamada l3 usando la semรกntica de movimiento. La lista l3 tendrรก el mismo contenido que la lista l2.
  9. Imprima el tamaรฑo de la lista denominada l en la consola junto con otro texto.
  10. Imprime algo de texto en la consola.
  11. Cree un iterador llamado it y utilรญcelo para iterar sobre los elementos de la lista llamada l2.
  12. Imprime los elementos de la lista denominada l2 en la consola.
  13. Imprime algo de texto en la consola.
  14. Cree un iterador llamado it y utilรญcelo para iterar sobre los elementos de la lista llamada l3.
  15. Imprime los elementos de la lista denominada l3 en la consola.
  16. El programa debe devolver valor una vez completado con รฉxito.
  17. Fin del cuerpo de la funciรณn main().

Propiedades del contenedor

Aquรญ estรก la lista de propiedades del contenedor:

Propiedad Descripciรณn
Secuencia Los contenedores de secuencia ordenan sus elementos en una secuencia lineal estricta. Se accede a los elementos por su posiciรณn en la secuencia.
Lista doblemente enlazada Cada elemento tiene informaciรณn sobre cรณmo localizar los elementos anteriores y siguientes, lo que permite disponer de un tiempo constante para las operaciones de inserciรณn y eliminaciรณn.
Consciente del asignador Un objeto asignador se utiliza para modificar dinรกmicamente el tamaรฑo de almacenamiento.

Insertar en una lista

Existen diferentes funciones que podemos utilizar para insertar valores en una lista. Demostremos esto:

Ejemplo

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

Salida:

Insertar en una lista

Aquรญ hay una captura de pantalla del cรณdigo:

Insertar en una lista

Explicaciรณn del cรณdigo:

  1. Incluya el archivo de encabezado del algoritmo para utilizar sus funciones.
  2. Incluya el archivo de encabezado iostream para utilizar sus funciones.
  3. Incluya el archivo de encabezado de lista para utilizar sus funciones.
  4. Llame a la funciรณn principal(). La lรณgica del programa debe agregarse dentro del cuerpo de esta funciรณn.
  5. Cree una lista llamada my_list con un conjunto de 4 nรบmeros enteros.
  6. Inserte el elemento 11 al frente de la lista denominada my_list.
  7. Inserte el elemento 18 al final de la lista denominada my_list.
  8. Cree un iterador y utilรญcelo para encontrar el elemento 10 de la lista my_list.
  9. Utilice una declaraciรณn if para determinar si se encontrรณ o no el elemento anterior.
  10. Inserte el elemento 21 antes del elemento anterior si se encontrรณ.
  11. Fin del cuerpo de la declaraciรณn if.
  12. Utilice un bucle for para crear una variable de bucle x. Esta variable se utilizarรก para iterar sobre los elementos de la lista.
  13. Imprima los valores de la lista en la consola.
  14. Fin del cuerpo del bucle for.
  15. Fin del cuerpo de la funciรณn main().

Eliminar de una lista

Es posible eliminar elementos de una lista. La funciรณn erase() le permite eliminar un elemento o un rango de elementos de una lista.

  • Para eliminar un solo elemento, simplemente pasa una posiciรณn entera. El elemento serรก eliminado.
  • Para eliminar un rango, pasa los iteradores inicial y final. Demostremos esto.

Ejemplo

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

Salida:

Eliminar de una lista

Aquรญ hay una captura de pantalla del cรณdigo:

Eliminar de una lista

Explicaciรณn del cรณdigo:

  1. Incluya el archivo de encabezado del algoritmo para utilizar sus funciones.
  2. Incluya el archivo de encabezado iostream para utilizar sus funciones.
  3. Incluya el archivo de encabezado de lista para utilizar sus funciones.
  4. Incluya el espacio de nombres estรกndar en nuestro programa para usar sus clases sin llamarlo.
  5. Llame a la funciรณn principal(). La lรณgica del programa debe agregarse dentro del cuerpo de esta funciรณn.
  6. Cree una lista llamada my_list con un conjunto de 4 nรบmeros enteros.
  7. Imprime algo de texto en la consola.
  8. Utilice un bucle for para crear una variable de bucle x. Esta variable se utilizarรก para iterar sobre los elementos de la lista.
  9. Imprima los valores de la lista en la consola.
  10. Fin del cuerpo del bucle for.
  11. Cree un iterador i que apunte al primer elemento de la lista.
  12. Utilice la funciรณn erase() seรฑalada por el iterador i.
  13. Imprime algo de texto en la consola.
  14. Utilice un bucle for para crear una variable de bucle x. Esta variable se utilizarรก para iterar sobre los elementos de la lista.
  15. Imprima los valores de la lista en la consola. Esto viene despuรฉs de la eliminaciรณn.
  16. Fin del cuerpo del bucle for.
  17. El programa debe devolver un valor al finalizar con รฉxito.
  18. Fin del cuerpo de la funciรณn main().

Resumen

  • std::list es un contenedor de almacenamiento.
  • Permite la inserciรณn y eliminaciรณn de elementos desde cualquier lugar en tiempo constante.
  • Se implementa como un doble enlace.
  • Se puede acceder a los datos std::list de forma bidireccional y secuencial.
  • std::list no admite acceso aleatorio rรกpido. Sin embargo, admite el acceso secuencial desde todas las direcciones.
  • Puede distribuir elementos de la lista de std::list en diferentes fragmentos de memoria.
  • Puede reducir o expandir std::list desde ambos extremos segรบn sea necesario durante el tiempo de ejecuciรณn.
  • Para insertar elementos en std::list, usamos la funciรณn insert().
  • Para eliminar elementos de std::list, usamos la funciรณn erase().

Resumir este post con: