#include<vector> #include<iostream> #include<stdexcept> template<typename T> class Stack { private: std::vector<T> elem; public: void push(const T&); void pop(void); T top() const; bool empty() const { return elem.empty(); } int size() const { return elem.size(); } }; template<typename T> void Stack<T>::push(T const& ele) { elem.push_back(ele); } template<typename T> void Stack<T>::pop(void) { if(!empty()) elem.pop_back(); else throw std::out_of_range("Stack<>::pop():empty stack"); } template<typename T> T Stack<T>::top() const { if(elem.empty()) throw std::out_of_range("Stack<>::top():empty stack"); return elem.back(); }