¿Qué es una std :: list?
En C ++, std :: list se refiere a un contenedor de almacenamiento. La lista std: le permite insertar y eliminar elementos desde cualquier lugar. La 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 admite el acceso secuencial desde todas las direcciones.
Puede dispersar los 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. La std :: list puede expandirse y encogerse desde ambos extremos según sea necesario durante el tiempo de ejecución. Un asignador interno cumple automáticamente los requisitos de almacenamiento.
En este tutorial de C ++, aprenderá:
- ¿Qué es una std :: list?
- ¿Por qué usar std :: list?
- Sintaxis de lista
- Funciones de lista de C ++
-
- Constructores
- Propiedades del contenedor
- Insertar en una lista
- Eliminar de una lista
¿Por qué usar std :: list?
Aquí están las razones para usar std :: List:
- La std :: list se compara mejor con otros contenedores de secuencia como matriz y vector.
- Tienen un mejor desempeño para insertar, mover y extraer elementos de cualquier posición.
- La std :: list también funciona mejor con algoritmos que realizan este tipo de 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> 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 asignador.
Esto usa la plantilla de clase de asignador de forma predeterminada. Depende del valor y utiliza un modelo de asignación de memoria simple.
Ejemplos 1:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}
Producción:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluya el archivo de encabezado del algoritmo para usar sus funciones.
- Incluya el archivo de encabezado de iostream para usar sus funciones.
- Incluya el archivo de encabezado de lista para usar sus funciones.
- Llame a la función main (). La lógica del programa debe agregarse dentro del cuerpo de esta función.
- Cree una lista llamada my_list con un conjunto de 4 enteros.
- Utilice un bucle for para crear una variable de bucle x. Esta variable se utilizará para iterar sobre los elementos de la lista.
- Imprima los valores de la lista en la consola.
- Fin del cuerpo del for a loop.
- Fin del cuerpo de la función main ().
Funciones de lista de C ++
Aquí están las funciones comunes de std :: list:
Función | Descripción |
insertar() | Esta función inserta un nuevo elemento antes de la posición que señala el iterador. |
hacer retroceder() | Estas funciones agregan un nuevo elemento al final de la lista. |
push_front () | Agrega un nuevo elemento al frente de la lista. |
pop_front () | Elimina el primer elemento de la lista. |
Talla() | Esta función determina el número de elementos de la lista. |
parte delantera() | Para determina los primeros elementos de la lista. |
espalda() | Para determina el último elemento de la lista. |
marcha atrás() | Invierte los elementos de la lista. |
unir() | Fusiona dos listas ordenadas. |
Constructores
Aquí está la lista de funciones proporcionadas por el archivo de encabezado
:
- Constructor por defecto std :: list :: list () - Crea una lista vacía, eso, con cero elementos.
- Fill constructor std :: list :: list () - Crea una lista con n elementos y asigna un valor de cero (0) a cada elemento.
- Range constructor std :: list :: list (): crea una lista con muchos elementos en el rango del primero al último.
- Copiar constructor std :: list :: list () - Crea una lista con una copia de cada elemento contenido en la lista existente.
- Move constructor std :: list :: list () - crea una lista con los elementos de otra lista usando la semántica de movimiento.
- Constructor de lista de inicializador std :: list :: list () - Crea una lista con los elementos de otra lista usando la semántica de movimiento.
Ejemplo 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;}
Producción:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluya el archivo de encabezado de iostream para usar sus funciones.
- Incluya el archivo de encabezado de lista para usar sus funciones.
- Incluya el espacio de nombres estándar en el código para usar sus clases sin llamarlo.
- Llame a la función main (). La lógica del programa debe agregarse dentro del cuerpo de esta función.
- Cree una lista vacía llamada l.
- Cree una lista denominada l1 con un conjunto de 3 enteros.
- Cree una lista denominada l2 con todos los elementos de la lista denominada l1, desde el principio hasta el final.
- Cree una lista denominada l3 utilizando la semántica de movimiento. La lista l3 tendrá el mismo contenido que la lista l2.
- Imprima el tamaño de la lista denominada l en la consola junto con otro texto.
- Imprime algo de texto en la consola.
- Cree un iterador con el nombre y utilícelo para iterar sobre los elementos de la lista denominada l2.
- Imprima los elementos de la lista denominada l2 en la consola.
- Imprime algo de texto en la consola.
- Cree un iterador con el nombre y utilícelo para iterar sobre los elementos de la lista denominada l3.
- Imprima los elementos de la lista denominada l3 en la consola.
- El programa debe devolver valor una vez completado con éxito.
- 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 ubicar los elementos anteriores y siguientes. Esto permite un tiempo constante para las operaciones de inserción y eliminación. |
Reconocido por el asignador | Un objeto asignador se utiliza para modificar el tamaño de almacenamiento de forma dinámica. |
Insertar en una lista
Hay diferentes funciones que podemos usar para insertar valores en una lista. Demostremos esto:
Ejemplo 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';}}
Producción:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluya el archivo de encabezado del algoritmo para usar sus funciones.
- Incluya el archivo de encabezado de iostream para usar sus funciones.
- Incluya el archivo de encabezado de lista para usar sus funciones.
- Llame a la función main (). La lógica del programa debe agregarse dentro del cuerpo de esta función.
- Cree una lista llamada my_list con un conjunto de 4 enteros.
- Inserte el elemento 11 al principio de la lista denominada my_list.
- Inserte el elemento 18 al final de la lista denominada my_list.
- Cree un iterador y utilícelo para encontrar el elemento 10 de la lista my_list.
- Utilice una declaración if para determinar si el elemento anterior se encontró o no.
- Inserte el elemento 21 antes del elemento anterior si se encontró.
- Fin del cuerpo de la sentencia if.
- Utilice un bucle for para crear una variable de bucle x. Esta variable se utilizará para iterar sobre los elementos de la lista.
- Imprima los valores de la lista en la consola.
- Fin del cuerpo del for a loop.
- Fin del cuerpo de la función main ().
Eliminar de una lista
Es posible eliminar elementos de una lista. La función borrar () le permite eliminar un elemento o un rango de elementos de una lista.
- Para eliminar un solo elemento, simplemente pase una posición entera. El elemento se eliminará.
- Para eliminar un rango, pasa los iteradores inicial y final. Demostremos esto.
Ejemplo 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;}
Producción:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluya el archivo de encabezado del algoritmo para usar sus funciones.
- Incluya el archivo de encabezado de iostream para usar sus funciones.
- Incluya el archivo de encabezado de lista para usar sus funciones.
- Incluya el espacio de nombres std en nuestro programa para usar sus clases sin llamarlo.
- Llame a la función main (). La lógica del programa debe agregarse dentro del cuerpo de esta función.
- Cree una lista llamada my_list con un conjunto de 4 enteros.
- Imprime algo de texto en la consola.
- Utilice un bucle for para crear una variable de bucle x. Esta variable se utilizará para iterar sobre los elementos de la lista.
- Imprima los valores de la lista en la consola.
- Fin del cuerpo del bucle for.
- Cree un iterador i que apunte al primer elemento de la lista.
- Utilice la función erase () señalada por el iterador i.
- Imprime algo de texto en la consola.
- Utilice un bucle for para crear una variable de bucle x. Esta variable se utilizará para iterar sobre los elementos de la lista.
- Imprima los valores de la lista en la consola. Esto viene después de la eliminación.
- Fin del cuerpo del bucle for.
- El programa debe devolver un valor una vez completado con éxito.
- 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 un tiempo constante.
- Se implementa como un doble enlace
- Se puede acceder a los datos de std :: list de forma bidireccional y secuencial.
- std :: list no admite el acceso aleatorio rápido. Sin embargo, admite el acceso secuencial desde todas las direcciones.
- Puede dispersar los 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 la lista std ::, usamos la función erase ().