#ifndef stack_h #define stack_h class StackIterator; class Stack { friend class StackIterator; int top; int *elems; public: Stack(int size = 50) { top = 0; elems = new int[size]; } ~Stack() { delete elems; } void push(int i) { elems[top++]=i; } int pop() { return elems[--top]; } int empty() { return top == 0; } }; class StackIterator { int current; Stack* st; public: StackIterator(Stack* s) { st = s; current = 0; } int end() { return st->top == current; } int next() { return st->elems[current++]; } }; #endif