(C++17) | ||||
Sequence | ||||
(C++11) | ||||
(C++26) | ||||
(C++26) | ||||
(C++11) | ||||
Associative | ||||
Unordered associative | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
Adaptors | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
Views | ||||
(C++20) | ||||
(C++23) | ||||
Tables | ||||
Iterator invalidation | ||||
Member function table | ||||
Non-member function table |
std::stack
Member functions | ||||
Element access | ||||
Capacity | ||||
Modifiers | ||||
stack::push | ||||
(C++23) | ||||
(C++11) | ||||
(C++11) | ||||
Non-member functions | ||||
(C++11) | ||||
Helper classes | ||||
(C++11) | ||||
(C++23) | ||||
Deduction guides(C++17) |
void push(const value_type& value); | (1) | |
void push( value_type&& value); | (2) | (since C++11) |
Pushes the given elementvalue to the top of the stack.
Contents |
value | - | the value of the element to push |
(none)
Equal to the complexity ofContainer::push_back.
This program implements theBrainHackDSL, when the use ofstd::stack is an idiomatic way to process paired brackets.
#include <array>#include <cstdint>#include <iostream>#include <map>#include <stack>#include <stdexcept>#include <string_view> class BrainHackInterpreter{std::map<unsigned,unsigned> open_brackets, close_brackets;std::array<std::uint8_t,32768> data_{0};unsigned program_{0};int pos_{0}; void collect_brackets(conststd::string_view program){std::stack<unsigned> brackets_stack; for(auto pos{0U}; pos!= program.length();++pos){if(constchar c{program[pos]};'['== c) brackets_stack.push(pos);elseif(']'== c){if(brackets_stack.empty())throwstd::runtime_error("Brackets [] do not match!");else{ open_brackets[brackets_stack.top()]= pos; close_brackets[pos]= brackets_stack.top(); brackets_stack.pop();}}} if(!brackets_stack.empty())throwstd::runtime_error("Brackets [] do not match!");} void check_data_pos(int pos){if(pos<0 orstatic_cast<int>(data_.size())<= pos)throwstd::out_of_range{"Data pointer out of bound!"};} public: BrainHackInterpreter(conststd::string_view program){for(collect_brackets(program); program_< program.length();++program_)switch(program[program_]){case'<': check_data_pos(--pos_);break;case'>': check_data_pos(++pos_);break;case'-':--data_[pos_];break;case'+':++data_[pos_];break;case'.':std::cout<< data_[pos_];break;case',':std::cin>> data_[pos_];break;case'[':if(data_[pos_]==0) program_= open_brackets[program_];break;case']':if(data_[pos_]!=0) program_= close_brackets[program_];break;}}}; int main(){ BrainHackInterpreter{"++++++++[>++>>++>++++>++++<<<<<-]>[<+++>>+++<-]>[<+""+>>>+<<-]<[>+>+<<-]>>>--------.<<+++++++++.<<----.>"">>>>.<<<------.>..++.<++.+.-.>.<.>----.<--.++.>>>+."};std::cout<<'\n';}
Output:
Hi, cppreference!
(C++11) | constructs element in-place at the top (public member function)[edit] |
removes the top element (public member function)[edit] |