Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- template <typename ElemT, int sizeP>
- class Stack
- {
- ElemT storage[sizeP];
- int topPosition;
- static const int emptyStack{ -1 };
- public:
- Stack() : topPosition{ emptyStack } {};
- int size() const { return sizeP; };
- bool empty() const { return topPosition == emptyStack; };
- bool full() const { return topPosition == sizeP - 1; };
- const ElemT& top() const { return storage[topPosition]; };
- bool topS(ElemT& val)
- {
- if (!empty())
- {
- val = storage[topPosition];
- return true;
- }
- return false;
- };
- bool push(const ElemT& elem)
- {
- if (!full())
- {
- storage[++topPosition] = elem;
- return true;
- }
- return false;
- }
- bool pop()
- {
- if (!empty())
- {
- --topPosition;
- return true;
- }
- return false;
- }
- template <typename ElementType, int size>
- friend std::ostream& operator<<(std::ostream&, const Stack<ElementType, size>& stack);
- };
- template <typename ElementType, int size>
- std::ostream& operator<<(std::ostream& out, const Stack<ElementType, size>& stack)
- {
- if (!stack.empty())
- {
- out << stack.top() << '\n';
- }
- else
- {
- out << "[empty]\n";
- }
- return out;
- };
- int main()
- {
- Stack<int, 5> stack;
- Stack<char, 8> stackCh;
- std::cout << stack << stackCh;
- std::cout << "Pushing in...\n";
- for (int cnt{ 0 }; !stack.full(); stack.push(cnt++))
- {
- std::cout << cnt << '\n';
- }
- stack.push(100);
- std::cout << stack;
- std::cout << "Popping out...\n";
- while (!stack.empty())
- {
- std::cout << stack;
- stack.pop();
- }
- stack.pop();
- std::cout << stack;
- std::cout << "Pushing in...\n";
- for (int cnt{ 0 }; !stack.full(); stack.push(cnt++))
- {
- std::cout << cnt << '\n';
- }
- std::cout << "Popping out...\n";
- while (!stack.empty())
- {
- auto& elem{ stack.top() };
- std::cout << elem << ' ';
- stack.pop();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement