Mega Code Archive

 
Categories / C++ Tutorial / Data Types
 

Generic stack

#include <iostream> using std::cout; using std::cin; using std::endl; template< class T > class Stack { public:    Stack( int = 10 );        ~Stack() { delete [] stackPtr; }     bool push( const T& );     bool pop( T& );         private:    int size;                 int top;                  T *stackPtr;              bool isEmpty() const { return top == -1; }    bool isFull() const { return top == size - 1; }  };  template< class T > Stack< T >::Stack( int s ) {    size = s > 0 ? s : 10;      top = -1;                   stackPtr = new T[ size ];  } template< class T > bool Stack< T >::push( const T &pushValue ) {    if ( !isFull() ) {       stackPtr[ ++top ] = pushValue;        return true;      }     return false;      } template< class T >  bool Stack< T >::pop( T &popValue ) {    if ( !isEmpty() ) {       popValue = stackPtr[ top-- ];        return true;      }     return false;     }  int main() {    Stack< double > doubleStack( 5 );    double f = 1.1;    cout << "Pushing elements onto doubleStack\n";    while ( doubleStack.push( f ) ) {       cout << f << ' ';       f += 1.1;    }    cout << f;    while ( doubleStack.pop( f ) )         cout << f << ' ';    Stack< int > intStack;    int i = 1;    while ( intStack.push( i ) ) {        cout << i << ' ';       ++i;    }     cout << i ;    while ( intStack.pop( i ) )       cout << i << ' ';    return 0; }