tmpl/stack4.hpp

The following code example is taken from the book
Object-Oriented Programming in C++
by Nicolai M. Josuttis, Wiley, 2002
© Copyright Nicolai M. Josuttis 2002


#include <stdexcept>

// **** BEGIN namespace CPPBook ********************************
namespace CPPBook {

template <typename T, int MAXSIZE>
class Stack {
  private:
    T elems[MAXSIZE];     // elements
    int numElems;         // current number of elements entered

  public:
    Stack();              // constructor
    void push(const T&);  // store new top element
    void pop();           // remove top element
    T top() const;        // return top element
};

// constructor
template <typename T, int MAXSIZE>
Stack<T,MAXSIZE>::Stack()
  : numElems(0)    // no elements
{
    // nothing more to do
}

template <typename T, int MAXSIZE>
void Stack<T,MAXSIZE>::push(const T& elem)
{
    if (numElems == MAXSIZE) {
        throw std::out_of_range("Stack<>::push(): stack is full");
    }
    elems[numElems] = elem;   // enter element
    ++numElems;               // increase number of elements
}

template<typename T, int MAXSIZE>
void Stack<T,MAXSIZE>::pop()
{
    if (numElems <= 0) {
        throw std::out_of_range("Stack<>::pop(): empty stack");
    }
    --numElems;               // reduce number of elements
}

template <typename T, int MAXSIZE>
T Stack<T,MAXSIZE>::top() const
{
    if (numElems <= 0) {
        throw std::out_of_range("Stack<>::top(): empty stack");
    }
    return elems[numElems-1];  // return top element
}

// **** END namespace CPPBook ********************************