template class CStack { public: static enum {CStack_StackEmpty, CStack_BadMemory}; unsigned int size() { return StackSize; } bool empty() { return StackSize == 0; } T pop() { if(StackIter == 0) throw (int)CStack_StackEmpty; return _Stack[--StackIter]; } void push(T j) { if(StackSize >= StackIter && _Stack != 0) { T* _newstack = (T*)malloc(sizeof(T) * (StackSize + 1)); if(_newstack == NULL) { free(_newstack); this->~CStack(); throw (int)CStack_BadMemory; } for(int i=0;i~CStack(); throw (int)CStack_BadMemory; } } _Stack[StackSize++] = j; StackIter = StackSize; } void clear() { StackIter = 0; } void allclear() // useless { free(_Stack); StackIter = StackSize = 0; } CStack() { StackIter = StackSize = 0; _Stack = NULL; } ~CStack() { free(_Stack); StackIter = StackSize = 0; } private: unsigned int StackSize, StackIter; T* _Stack; };