Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

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

      From cppreference.com
      <cpp‎ |container‎ |stack

      [edit template]
       
       
       
       
      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.

      1) Equivalent to:c.push_back(value).
      2) Equivalent to:c.push_back(std::move(value)).

      Contents

      [edit]Parameters

      value - the value of the element to push

      [edit]Return value

      (none)

      [edit]Complexity

      Equal to the complexity ofContainer::push_back.

      [edit]Example

      This program implements theBrainHackDSL, when the use ofstd::stack is an idiomatic way to process paired brackets.

      Run this code
      #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!

      [edit]See also

      (C++11)
      constructs element in-place at the top
      (public member function)[edit]
      removes the top element
      (public member function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/stack/push&oldid=122472"

      [8]ページ先頭

      ©2009-2025 Movatter.jp