Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Dominando std::stack en C++: Guía completa con ejemplos prácticos

¿Qué es std::stack?

std::stack es un adaptador de contenedor que implementa el principio LIFO (Last In, First Out – último en entrar, primero en salir). Permite inserción y eliminación de elementos solo desde un extremo: la cima. Por defecto, usa std::deque como contenedor subyacente, pero cualquier contenedor de secuencia (ej. std::vector o std::list) puede suministrarse.

Los adaptadores de contenedor no exponen iteradores, por lo que no puede recorrer una pila directamente. En su lugar, interactúa con ella a través de sus funciones miembro.

Objetivos de aprendizaje

Sintaxis

Incluya la cabecera <stack> y declare una pila con la siguiente plantilla:

template<class T, class Container = std::deque<T>> class stack; 

Tipos miembro

Operaciones principales

Visión general de la implementación

A continuación, una representación visual de las operaciones de pila (la cima indicada por el puntero).
Dominando std::stack en C++: Guía completa con ejemplos prácticos

push() y pop()

El método push() agrega un nuevo elemento, aumentando el tamaño en uno:

pila.push(valor);

Por el contrario, pop() elimina el elemento de la cima y reduce el tamaño:

pila.pop();

Ejemplo 1: Manipulación básica de pila

#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(); // elimina 40
    st.pop(); // elimina 30
    while (!st.empty()) {
        cout << ' ' << st.top();
        st.pop();
    }
    return 0;
}

Salida: 20 10

empty(), size(), top()

Estas funciones utilitarias proporcionan información rápida sobre el estado de la pila.

Ejemplo 2: Inspección del estado de la pila

#include <iostream>
#include <stack>
using namespace std;
void mostrar(stack<int> s) {
    while (!s.empty()) {
        cout << '\t' << s.top();
        s.pop();
    }
    cout << '\n';
}
int main() {
    stack<int> st;
    st.push(32);
    st.push(21);
    st.push(39);
    st.push(89);
    st.push(25);
    cout << "La pila st es: ";
    mostrar(st);
    cout << "\n st.size() : " << st.size();
    cout << "\n st.top() : " << st.top();
    st.pop();
    cout << "\n st después de pop: ";
    mostrar(st);
    return 0;
}

Salida: muestra contenidos de la pila, tamaño, elemento superior y estado tras un pop.

emplace() y swap()

• emplace() construye un elemento in-place, evitando una copia extra.
• swap() intercambia los contenidos de dos pilas eficientemente.

Ejemplo 3: Uso de emplace() y swap()

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack<int> st1, 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: demuestra los contenidos de las pilas antes y después del intercambio.

Uso de std::stack en STL

Implemente una pila con una sola línea:

std::stack<T> st;

Ejemplo:

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack<int> st;
    st.push(12);
    st.push(19);
    st.push(20);
    cout << st.top(); // 20
    cout << st.size(); // 3
    return 0;
}

Resumen

Lenguaje C

  1. Operadores en C++ explicados: Tipos, ejemplos y programas de muestra
  2. Bucle do‑while en C++: Sintaxis, ejemplos prácticos y bucles anidados
  3. Dominando switch-case en C++: Sintaxis, uso y ejemplos prácticos
  4. Asignación dinámica de arrays en C++: Guía práctica con ejemplos de código
  5. Dominando punteros en C++: Conceptos, ejemplos y aplicaciones prácticas
  6. Sobrecarga de operadores en C++: Guía práctica con ejemplos de código
  7. Structs en C++ explicados con un ejemplo práctico
  8. Dominando std::map en C++: Guía completa con ejemplos de código
  9. Dominar std::list en C++: Sintaxis, Funciones y Ejemplos Prácticos
  10. Funciones en C++ Explicadas con Ejemplos de Código Prácticos
  11. Struct vs Class en C++: Diferencias Clave, Sintaxis y Mejores Casos de Uso