#include<iostream> #include<stack> usingnamespacestd; intmain() { stack<int> st; // push three elements into the stack st.push(1); st.push(2); st.push(3); // pop and print two elements from the stack cout << st.top() << ' '; st.pop(); cout << st.top() << ' '; st.pop(); // modify top element st.top() = 77; // push two new elements st.push(4); st.push(5); // pop one element without processing it st.pop(); // pop and print remaining elements while (!st.empty()) { cout << st.top() << ' '; st.pop(); } cout << endl; system("Pause"); }
/* Stack.h - safer and more covenient stack class */ #pragma once #include <deque> #include <exception> template <typename T> class Stack { protected: std::deque<T> c; // container for the elements public: // exception class for pop() and top() with empty stack class ReadEmptyStack : public std::exception { public: virtual const char* what() const throw() { return "read empty stack"; } }; // number of elements typename std::deque<T>::size_type size() const { return c.size(); } // is stack empty? bool empty() const {return c.empty();} // push element into the stack void push (const T& elem) {c.push_back(elem);} // pop element out of the stack and return its value T pop() { if (c.empty()) {throw ReadEmptyStack();} T elem(c.back()); c.pop_back(); return elem; } // return value of next element T& top() { if (c.empty()) {throw ReadEmptyStack();} return c.back(); } };