// tStack2.h #pragma once #include using std::out_of_range; template class Stack { public: Stack(int size=10); ~Stack(); void push(const T&); // push element void pop(); // pop element T top() const; // return top element bool isEmpty() const; // return true if empty. private: int nElems; // current number of elements int maxElems; // maximum number of elements T *elems; // elements }; template Stack::Stack(int size): nElems(0), maxElems(size) { elems = new T[size]; } template Stack::~Stack() { delete[] elems; } template bool Stack::isEmpty() const { return nElems<=0; } template void Stack::push(const T& elem) { if (nElems>=maxElems) throw out_of_range("Stack<>::push(): full stack"); elems[nElems++] = elem; } template void Stack::pop() { if (nElems<=0) throw out_of_range("Stack<>::pop(): empty stack"); nElems--; } template T Stack::top() const { if (nElems<=0) throw out_of_range("Stack<>::top(): empty stack"); return elems[nElems-1]; }