#include #include #include template class stack { public: stack(int defalut = 8): sequence(new T[defalut]), top(0), capacity(defalut) {} ~stack() { delete[] sequence; } void push(const T value) { if (top == capacity) //stack is full,allocate larger capacity { capacity <<= 1; T* temp = new T[capacity]; memcpy(temp, sequence, sizeof(T)*top); delete[] sequence; sequence = temp; } sequence[top++] = value; } T pop() { assert(top != 0); return sequence[top--]; } T operator[](int n) { return *(this->sequence + n); } int size() const { return top; } private: T* sequence; int top; int capacity; }; /* for test */ // int main(int argc, char const *argv[]) // { // stack s; // int i=0; // while(s.size()<100) // { // s.push(i); // cout<0) // s.pop(); // return 0; // }