# include <assert.h>
template<class T>
class Stack{
public:
Stack(int size) {
this->size = size ;
stack = new T[this->size] ;
tos = -1 ;
}
~Stack() {
delete [] stack ;
}
void push(T data) {
assert(tos <=size-1) ;
++tos ;
stack[tos] = data ;
}
T pop() {
assert(tos >= 0) ;
return stack[tos--] ;
}
bool isFull(){
return tos >= size-1 ;
}
bool isEmpty(){
return tos < 0 ;
}
private:
T* stack;
int size ;
int tos ;
};
void main() {
Stack<int> stack(10) ;
for (int i = 0 ; i < 11 ; i++ ) {
if (!stack.isFull()){
stack.push(i) ;
}
}
for ( i = 0 ; i < 11 ; i++ ) {
if (!stack.isEmpty()){
cout << stack.pop() << " " ;
}
}
}