Apilar en C++ STL con ejemplo
โก Resumen inteligente
Apilar en C++ STL implementa un adaptador de contenedor LIFO que agrega y elimina elementos desde un รบnico extremo, envoltorioping un contenedor de secuencia subyacente, como una cola doble, un vector o una lista, para gestionar datos ordenados.
ยฟQuรฉ es std::stack?
Una pila es una estructura de datos que funciona segรบn la tรฉcnica LIFO (Last In First Out). La pila std::stack permite agregar y quitar elementos desde un solo extremo.
La clase `std::stack` es un adaptador de contenedor. Los objetos contenedor almacenan datos de un tipo de dato similar. Se puede crear una pila a partir de varios contenedores de secuencia. Si no se proporciona ningรบn contenedor, se utilizarรก el contenedor `deque` por defecto. Los adaptadores de contenedor no admiten iteradores, por lo que no se pueden utilizar para manipular datos.
Sintaxis de pila
Para crear una pila, debemos incluir el archivo de encabezado en nuestro cรณdigo. Luego usamos esta sintaxis para definir std::stack:
template <class Type, class Container = deque<Type> > class stack;
- Tipo โ es el tipo de elemento contenido en std::stack. Puede ser cualquier valido C++ tipo o incluso un tipo definido por el usuario.
- Envase โ es el tipo de objeto contenedor subyacente.
Tipos de miembros
Estos son los tipos de miembros de la pila:
- tipo_de_valorโ El primer parรกmetro de la plantilla, T. Indica los tipos de elementos.
- tipo_de_contenedorโ El segundo parรกmetro de la plantilla, Contenedor. Indica el tipo de contenedor subyacente.
- tipo_de_tamaรฑoโ Tipo entero sin signo.
Operaciones en pila
A C++ La pila admite las siguientes operaciones bรกsicas:
- empuje โ Agrega/empuja un elemento a la pila.
- Deliciosos โ Elimina/extrae un elemento de la pila.
- ojeada โ Devuelve el elemento superior de la pila sin eliminarlo.
- estรก lleno โ Comprueba si una pila estรก llena.
- esta vacio โ Comprueba si una pila estรก vacรญa.
Implementaciรณn de pila
Los siguientes pasos muestran cรณmo cambia la parte superior de la pila a medida que se insertan y luego se extraen elementos:
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 insertado el elemento 5 en la pila. La parte superior de la pila apuntarรก al elemento 5.
Paso 3) A continuaciรณn, hemos insertado el elemento 50 en la pila. La parte superior de la pila se desplaza y apunta al elemento 50.
Paso 4) A continuaciรณn, realizamos una operaciรณn de extracciรณn, 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()
La funciรณn stack::push() agrega 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 tiene la siguiente sintaxis:
stack.push(value)
El valor es el elemento que se insertarรก en la pila.
La funciรณn stack::pop() elimina el elemento superior de la pila. Este es el elemento mรกs reciente 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:
Code Explicaciรณn:
- Incluya el archivo de encabezado iostream en nuestro cรณdigo para usar sus funciones.
- Incluya el archivo de encabezado de la 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.
- Llame a la funciรณn principal(). La lรณgica del programa debe agregarse dentro de esta funciรณn.
- Cree una pila st para almacenar valores enteros.
- Utilice 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.
- Utilice un bucle while y la funciรณn empty() para comprobar si la pila NO estรก vacรญa. El ! es el operador NOT.
- Imprimir el contenido actual de la pila en la consola.
- Llame a la funciรณn pop() en la pila.
- Fin del cuerpo del bucle while.
- Fin del cuerpo de la funciรณn main().
vacรญo(), tamaรฑo(), superior()
Las pilas tienen funciones incorporadas que puedes usar para jugar con la pila y sus valores. รstas incluyen:
- vacรญo()โ Comprueba si una pila estรก vacรญa o no.
- Talla()โ Devuelve el tamaรฑo de la pila, es decir, el nรบmero de elementos en una pila.
- parte superior()โ accede al elemento de la pila que se encuentra 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:
Code Explicaciรณn:
- Incluya el archivo de encabezado iostream en nuestro cรณdigo para poder utilizar sus funciones.
- Incluya el archivo de encabezado de la pila en nuestro cรณdigo para poder utilizar sus funciones.
- Incluya el espacio de nombres estรกndar en nuestro programa para poder usar sus clases sin llamarlo.
- Crea la funciรณn createStack que podemos usar para crear la pila mystack. La pila contendrรก un conjunto de nรบmeros 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 vacรญa() para comprobar si la pila estรก vacรญa.
- El inicio del cuerpo del bucle while.
- Utilice la funciรณn top() almacenada en la parte superior de la pila. El carรกcter \t crearรก una nueva pestaรฑa.
- Utilice la funciรณn pop() para eliminar el elemento en la parte superior de la pila.
- Fin del cuerpo del bucle while.
- Imprime una lรญnea en blanco en la consola.
- Fin del cuerpo de la funciรณn createStack.
- Llame a la funciรณn principal(). La lรณgica del programa debe agregarse dentro del cuerpo de la funciรณn main().
- El inicio del cuerpo de la funciรณn main().
- Crea 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.
- Llame 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.
- Imprime el elemento en la parte superior de la pila en la consola.
- Imprime algo de texto en la consola.
- Elimina el elemento en la parte superior de la pila. Luego devolverรก los elementos que quedan en la pila.
- Llame a la funciรณn createStack para ejecutar las operaciones anteriores.
- El programa debe devolver valor una vez completado con รฉxito.
- Fin del cuerpo de la funciรณn main().
emplazar() e intercambiar()
Estas son otras funciones de pila incorporadas:
- emplace()โ luego construye e inserta un nuevo elemento en la parte superior de la pila.
- intercambio()โ Intercambia el contenido de una 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(); } }
Salida:
Aquรญ hay una captura de pantalla del cรณdigo:
Code Explicaciรณn:
- Incluya el archivo de encabezado iostream en nuestro cรณdigo para usar sus funciones.
- Incluya el archivo de encabezado de la 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.
- Llame a la funciรณn principal(). 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 debe moverse 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 vacรญa() para comprobar si la pila st1 no estรก vacรญa.
- Imprime 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 declaraciรณn while.
- Imprime algo de texto en la consola. El final es un C++ palabra clave para la 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 vacรญa() para comprobar si la pila st2 no estรก vacรญa.
- Imprime 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 declaraciรณn while.
- Fin del cuerpo de la funciรณn main().
Apilar en STL
La STL (Biblioteca de plantillas estรกndar) viene con clases de plantillas que proporcionan C++ estructuras de datos. Por lo tanto, tambiรฉn se puede implementar una pila 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 del tipo de datos T.
Ejemplo 4:
#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:
Code Explicaciรณn:
- Incluya el archivo de encabezado iostream en nuestro cรณdigo para usar sus funciones.
- Incluya el archivo de encabezado de la 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.
- Llame a la funciรณn principal(). La lรณgica del programa debe agregarse dentro del cuerpo de esta funciรณn.
- Declare una pila st para almacenar datos enteros.
- Agrega el elemento 12 a la pila.
- Agrega el elemento 19 a la pila.
- Agrega el elemento 20 a la pila.
- Imprime el elemento en la parte superior de la pila en la consola.
- Imprime el tamaรฑo de la pila en la consola.
- Fin del cuerpo de la funciรณn main().







