Espacios de nombres
Variantes
Acciones

std::stack<T,Container>::push

De cppreference.com
< cpp‎ | container‎ | stack
 
 
 
 
void push( const value_type& value );
void push( value_type&& value );
(desde C++11)

Apila el elemento dado value en la parte superior de la pila.

1) Efectivamente llama a c.push_back(value)
2) Efectivamente llama a c.push_back(std::move(value))

Contenido

[editar] Parámetros

value - El valor del elemento a apilar.

[editar] Valor de retorno

(Ninguno)

[editar] Complejidad

Igual a la complejidad de Container::push_back.

[editar] Ejemplo

Este programa implementa el famoso lenguaje específico de dominio BrainHack, cuando std::stack es especialmente conveniente para colectar corchetes emparejados.

#include <map>
#include <stack>
#include <array>
#include <iostream>
#include <stdexcept>
#include <string_view>
 
class BrainHackInterpreter {
    std::map<unsigned, unsigned> open_brackets, close_brackets;
    unsigned program_pos_{0};
    std::array<std::uint8_t, 32768> data_;
    int data_pos_{0};
 
    void collect_brackets_positions(const std::string_view program) {
        std::stack<unsigned> brackets_stack;
 
        for (auto pos{0U}; pos != program.length(); ++pos) {
            const char c{program[pos]};
            if ('[' == c) {
                brackets_stack.push(pos);
            } else if (']' == c) {
                if (brackets_stack.empty()) {
                    throw std::runtime_error("los corchetes [] no coinciden");
                } else {
                    open_brackets[brackets_stack.top()] = pos;
                    close_brackets[pos] = brackets_stack.top();
                    brackets_stack.pop();
                }
            }
        }
 
        if (!brackets_stack.empty())
            throw std::runtime_error("los corchetes [] no coinciden");
    }
 
    void check_data_pos(int pos) {
        if (pos < 0 or pos >= static_cast<int>(data_.size()))
            throw std::out_of_range{"puntero a datos fuera de límite"};
    }
 
  public:
    BrainHackInterpreter(const std::string_view program) {
        collect_brackets_positions(program);
        data_.fill(0);
 
        for (; program_pos_ < program.length(); ++program_pos_) {
            switch (program[program_pos_]) {
                case '<': check_data_pos(--data_pos_); break;
                case '>': check_data_pos(++data_pos_); break;
                case '-': --data_[data_pos_]; break;
                case '+': ++data_[data_pos_]; break;
                case '.': std::cout << data_[data_pos_]; break;
                case ',': std::cin >> data_[data_pos_]; break;
                case '[':
                    if (data_[data_pos_] == 0)
                        program_pos_ = open_brackets[program_pos_];
                    break;
                case ']':
                    if (data_[data_pos_] != 0)
                        program_pos_ = close_brackets[program_pos_];
                    break;
            }
        }
    }
};
 
int main()
{
    BrainHackInterpreter
    {
        "++++++++[>++>>++>++++>++++<<<<<-]>[<+++>>+++<-]>[<+"
        "+>>>+<<-]<[>+>+<<-]>>>--------.<<+++++++++.<<----.>"
        ">>>>.<<<------.>..++.<++.+.-.>.<.>----.<--.++.>>>+."
    };
}

Salida:

Hi, cppreference!

[editar] Véase también

(C++11)
Apila el elemento en el sitio en la parte superior de la pila.
(función miembro pública) [editar]
Desapila el elemento en la parte superior de la pila.
(función miembro pública) [editar]