template <class T>
class _stack{
private:
T* ele;
int _top, cap;
public:
_stack<T>():_top(0), cap(2){
ele = new T[cap];
}
~_stack<T>(){
delete[] ele;
}
void resize(int ncap){
cap = ncap;
T* tmp = new T[cap];
for(int i = 0; i < _top; i++)
tmp[i] = ele[i];
delete[] ele;
ele = tmp;
}
int full(){return _top == cap;}
int empty(){return _top == 0;}
int size(){return _top;}
void push(T e){
if(full()) resize(cap * 2);
ele[_top++] = e;
}
void pop(){
if(empty()) return;
_top--;
}
T top(){
if(empty()) return NULL;
return ele[_top - 1];
}
void clear(){
_top = 0;
resize(2);
}
};