ComputerScience/STL

[STL] Stack

kyungmin.yu 2019. 4. 10. 10:45
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);        
    }
};