Apilar en C++ STL con ejemplo
¿Qué es estándar::pila?
Una pila es una estructura de datos que opera en base a la técnica LIFO (Last In First Out). El std::stack permite agregar y eliminar elementos de un solo extremo.
La clase std::stack es un adaptador de contenedor. Los objetos contenedores contienen datos de un tipo de datos similar. Puede crear una pila a partir de varios contenedores de secuencia. Si no se proporciona ningún contenedor, se usará deque container de forma predeterminada. Los adaptadores de contenedores no admiten iteradores, por lo que no se pueden usar para manipular datos.
En este tutorial de C++, aprenderá
- ¿Qué es std::stack?
- Sintaxis de pila
- Tipos de miembros
- Operaciones en la pila
- Implementación de pila
- empujar() y hacer estallar()
- vacío(), tamaño(), arriba()
- emplace() y swap()
- Apilar en STL
Sintaxis de pila
Para crear una pila, debemos incluir el archivo de encabezado
template <class Type, class Container = deque<Type> > class stack;
- Tipo – es el Tipo de elemento contenido en std::stack. Puede ser cualquier tipo de C++ válido o incluso un tipo definido por el usuario.
- Contenedor – es el Tipo de objeto contenedor subyacente.
Tipos de miembros
Estos son los tipos de miembros de la pila:
- value_type:el primer parámetro de plantilla, T. Denota los tipos de elementos.
- container_type:el segundo parámetro de plantilla, Container. Denota el tipo de contenedor subyacente.
- size_type:tipo integral sin signo.
Operaciones en Pila
Una pila de C++ admite las siguientes operaciones básicas:
- empujar:agrega/empuja un elemento a la pila.
- pop:elimina/abre un elemento de la pila.
- peek:devuelve el elemento superior de la pila sin eliminarlo.
- isFull:comprueba si una pila está llena.
- isEmpty:comprueba si una pila está vacía.
Implementación de pila
Paso 1) Inicialmente tenemos una pila vacía. La parte superior de una pila vacía se establece en -1.
Paso 2) A continuación, hemos empujado el elemento 5 a la pila. La parte superior de la pila apuntará al elemento 5.
Paso 3) A continuación, hemos empujado el elemento 50 a la pila. La parte superior de la pila se desplaza y apunta al elemento 50.
Paso 4) Luego hemos realizado una operación emergente, eliminando el elemento superior de la pila. El elemento 50 se extrae de la pila. La parte superior de la pila ahora apunta al elemento 5.
empujar() y hacer estallar()
Las funciones stack::push() agregan un nuevo elemento a la parte superior de la pila. El tamaño de la pila aumenta en 1 después de la inserción. La función toma esta sintaxis:
stack.push(value)
El valor es el elemento a insertar en la pila.
La función stack::pop() elimina el elemento superior de la pila. Este es el elemento más nuevo de la pila. El tamaño de la pila se reduce en 1 después de la eliminación. Esta es la sintaxis de la función:
stack.pop()
La función no toma parámetros.
Ejemplo 1:
#include <iostream> #include <stack> using namespace std; int main() { stack<int> st; st.push(10); st.push(20); st.push(30); st.push(40); st.pop(); st.pop(); while (!st.empty()) { cout << ' ' << st.top(); st.pop(); } }
Salida:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluya el archivo de encabezado iostream en nuestro código para usar sus funciones.
- Incluya el archivo de encabezado de pila en nuestro código para usar sus funciones.
- Incluya el espacio de nombres estándar en nuestro código para usar sus clases sin llamarlo.
- Llama a la función main(). La lógica del programa debe agregarse dentro de esta función.
- Cree una pila st para almacenar valores enteros.
- Use la función push() para insertar el valor 10 en la pila.
- Utilice la función push() para insertar el valor 20 en la pila.
- Utilice la función push() para insertar el valor 30 en la pila.
- Utilice la función push() para insertar el valor 40 en la pila.
- Utilice la función pop() para eliminar el elemento superior de la pila, es decir, 40. El elemento superior ahora se convierte en 30.
- Utilice la función pop() para eliminar el elemento superior de la pila, es decir, 30. El elemento superior ahora se convierte en 20.
- Use un bucle while y la función de vacío() para verificar si la pila NO está vacía. Los ! es el operador NOT.
- Imprimiendo el contenido actual de la pila en la consola.
- Llama a la función pop() en la pila.
- Fin del cuerpo del ciclo while.
- Fin del cuerpo de la función main().
vacío(), tamaño(), superior()
Las pilas tienen funciones integradas que puedes usar para jugar con la pila y sus valores. Estos incluyen:
- empty()- comprueba si una pila está vacía o no.
- size()- devuelve el tamaño de la pila, es decir, el número de elementos en una pila.
- top()- accede al elemento de la pila en la parte superior.
Ejemplo 2:
#include <iostream> #include <stack> using namespace std; void createStack(stack <int> mystack) { stack <int> ms = mystack; while (!ms.empty()) { cout << '\t' << ms.top(); ms.pop(); } cout << '\n'; } int main() { stack <int> st; st.push(32); st.push(21); st.push(39); st.push(89); st.push(25); cout << "The stack st is: "; createStack(st); cout << "\n st.size() : " << st.size(); cout << "\n st.top() : " << st.top(); cout << "\n st.pop() : "; st.pop(); createStack(st); return 0; }
Salida:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluya el archivo de encabezado iostream en nuestro código para usar sus funciones.
- Incluya el archivo de encabezado de pila en nuestro código para usar sus funciones.
- Incluya el espacio de nombres estándar en nuestro programa para usar sus clases sin llamarlo.
- Cree la función createStack que podemos usar para crear la pila mystack. La pila contendrá un conjunto de enteros.
- El comienzo del cuerpo de la función createStack.
- Cree una instancia del tipo de datos mystack y asígnele el nombre ms.
- Utilice el bucle while y la función empty() para comprobar si la pila está vacía.
- El comienzo del cuerpo del ciclo while.
- Utilice la función top() almacenada en la parte superior de la pila. El carácter \t creará una nueva pestaña.
- Use la función pop() para eliminar el elemento en la parte superior de la pila.
- Fin del cuerpo del ciclo while.
- Imprime una línea en blanco en la consola.
- Fin del cuerpo de la función createStack.
- Llama a la función main(). La lógica del programa debe agregarse dentro del cuerpo de la función main().
- El comienzo del cuerpo de la función main().
- Cree un objeto de pila st.
- Utilice la función push() para insertar el elemento 32 en la pila.
- Utilice la función push() para insertar el elemento 21 en la pila.
- Utilice la función push() para insertar el elemento 39 en la pila.
- Utilice la función push() para insertar el elemento 89 en la pila.
- Utilice la función push() para insertar el elemento 25 en la pila.
- Imprime algo de texto en la consola.
- Llama a la función createStack para ejecutar las operaciones de inserción anteriores en la pila.
- Imprima el tamaño de la pila en la consola junto con otro texto.
- Imprima el elemento en la parte superior de la pila en la consola.
- Imprime algo de texto en la consola.
- Elimine el elemento en la parte superior de la pila. Luego devolverá los elementos restantes en la pila.
- Llama a la función createStack para ejecutar las operaciones anteriores.
- El programa debe devolver valor al completarse con éxito.
- Fin del cuerpo de la función main().
emplazar() e intercambiar()
Estas son otras funciones de pila incorporadas:
- emplace()- Construye y luego inserta un nuevo elemento en la parte superior de la pila.
- swap()- intercambia el contenido de la pila con el contenido de otra pila.
Ejemplo 3:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st1; stack<int> st2; st1.emplace(12); st1.emplace(19); st2.emplace(20); st2.emplace(23); st1.swap(st2); cout << "st1 = "; while (!st1.empty()) { cout << st1.top() << " "; st1.pop(); } cout << endl << "st2 = "; while (!st2.empty()) { cout << st2.top() << " "; st2.pop(); } }
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluya el archivo de encabezado iostream en nuestro código para usar sus funciones.
- Incluya el archivo de encabezado de pila en nuestro código para usar sus funciones.
- Incluya el archivo de encabezado cstdlib en nuestro código para usar sus funciones.
- Incluya el espacio de nombres estándar en nuestro código para usar sus clases sin llamarlo.
- Llama a la función main(). La lógica del programa se agregará dentro del cuerpo de esta función.
- Declare una pila llamada st1 para almacenar valores enteros.
- Declare una pila llamada st2 para almacenar valores enteros.
- Utilice la función emplace() para insertar el número entero 12 en la pila denominada st1.
- Utilice la función emplace() para insertar el número entero 19 en la pila denominada st1.
- Utilice la función emplace() para insertar el número entero 20 en la pila denominada st2.
- Utilice la función emplace() para insertar el número entero 23 en la pila denominada st2.
- Utilice la función swap() para intercambiar el contenido de las dos pilas, st1 y st2. El contenido de la pila st1 se debe mover a la pila st2. El contenido de la pila st2 debe moverse a la pila st1.
- Imprime algo de texto en la consola.
- Utilice la instrucción while y la función empty() para verificar si la pila st1 no está vacía.
- Imprima el contenido de la pila st1 en la consola. El ” ” agrega espacio entre los elementos de la pila al imprimirlos en la consola.
- Ejecute la función pop() en la pila st1 para eliminar el elemento superior.
- Fin del cuerpo de la instrucción while.
- Imprime algo de texto en la consola. endl es una palabra clave de C++ para línea final. Mueve el cursor del mouse a la siguiente línea para comenzar a imprimir desde allí.
- Utilice la instrucción while y la función empty() para verificar si la pila st2 no está vacía.
- Imprima el contenido de la pila st2 en la consola. El ” ” agrega espacio entre los elementos de la pila al imprimirlos en la consola.
- Ejecute la función pop() en la pila st2 para eliminar el elemento superior.
- Fin del cuerpo de la instrucción while.
- Fin del cuerpo de la función main().
Apilar en STL
La STL (Biblioteca de plantillas estándar) viene con clases de plantilla que proporcionan estructuras de datos comunes de C++. Por lo tanto, una pila también se puede implementar en STL. Simplemente incluimos esta biblioteca en nuestro código y la usamos para definir una pila.
stack<T> st;
La sintaxis anterior declara una pila st a elementos de tipo de datos T.
Ejemplo 3:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st; st.push(12); st.push(19); st.push(20); cout << st.top(); cout << st.size(); }
Salida:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluya el archivo de encabezado iostream en nuestro código para usar sus funciones.
- Incluya el archivo de encabezado de pila en nuestro código para usar sus funciones.
- Incluya el archivo de encabezado cstdlib en nuestro código para usar sus funciones.
- Incluya el espacio de nombres estándar en nuestro código para usar sus clases sin llamarlo.
- Llama a la función main(). La lógica del programa debe agregarse dentro del cuerpo de esta función.
- Declare una pila st para almacenar datos enteros.
- Agregue el elemento 12 a la pila.
- Agregue el elemento 19 a la pila.
- Agregue el elemento 20 a la pila.
- Imprima el elemento en la parte superior de la pila en la consola.
- Imprima el tamaño de la pila en la consola.
- Fin del cuerpo de la función main().
Resumen:
- Una pila es una estructura de datos que funciona según la técnica LIFO (Último en entrar, primero en salir).
- La pila std::stack solo permite agregar y eliminar elementos de un extremo.
- La clase std::stack es un adaptador de contenedor que contiene elementos de un tipo de datos similar.
- Se puede crear una pila a partir de varios contenedores de secuencia.
- Si no proporciona un contenedor, el contenedor deque se utilizará de forma predeterminada.
- La función push() es para insertar elementos en la pila.
- La función pop() es para eliminar el elemento superior del paso.
- La función empty() es para verificar si una pila está vacía o no.
Lenguaje C
- Operadores en C++ con Ejemplo:Qué es, Tipos y Programas
- C++ do...while bucle con ejemplos
- Declaración de caso de cambio de C ++ con EJEMPLO
- C++ Asignación dinámica de arreglos con ejemplo
- Punteros de C++ con ejemplos
- Sobrecarga de operadores de C++ con ejemplos
- Estructura C++ con ejemplo
- Mapa en la biblioteca de plantillas estándar (STL) de C++ con ejemplo de impresión
- std::list en C++ con ejemplo
- Funciones de C++ con ejemplos de programas
- Diferencia entre estructura y clase:explicada con el ejemplo de C++