GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::stack::push(3) C++ Standard Libary std::stack::push(3)

std::stack::push - std::stack::push


void push( const value_type& value );
void push( value_type&& value ); (since C++11)


Pushes the given element value to the top of the stack.


1) Effectively calls c.push_back(value)
2) Effectively calls c.push_back(std::move(value))


value - the value of the element to push


(none)


Equal to the complexity of Container::push_back.


This program implements the famous DSL BrainHack, when std::stack is especially
convenient to collect paired brackets.

// Run this code


#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("brackets [] do not match!");
} else {
open_brackets[brackets_stack.top()] = pos;
close_brackets[pos] = brackets_stack.top();
brackets_stack.pop();
}
}
}


if (!brackets_stack.empty())
throw std::runtime_error("brackets [] do not match!");
}


void check_data_pos(int pos) {
if (pos < 0 or pos >= static_cast<int>(data_.size()))
throw std::out_of_range{"data pointer out of bound"};
}


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
{
"++++++++[>++>>++>++++>++++<<<<<-]>[<+++>>+++<-]>[<+"
"+>>>+<<-]<[>+>+<<-]>>>--------.<<+++++++++.<<----.>"
">>>>.<<<------.>..++.<++.+.-.>.<.>----.<--.++.>>>+."
};
}


Hi, cppreference!


emplace constructs element in-place at the top
(C++11) (public member function)
pop removes the top element
(public member function)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.