00001
00002
00003
00004
00005 #ifndef HEP_STACK_SRC
00006 #define HEP_STACK_SRC
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 template<class T>
00020 class stack {
00021 private:
00022 int k, max_size;
00023 T * v;
00024
00025 public:
00026 stack() : k(0), max_size(20), v(new T[20]) {}
00027 ~stack() { delete [] v; }
00028
00029 int size() const { return k; }
00030 T top () const { return v[k-1]; }
00031 T & top () { return v[k-1]; }
00032 void pop () { k--; }
00033 void push(T a) {
00034 if (k == max_size) {
00035 T * w = v;
00036 max_size *= 2;
00037 v = new T[max_size];
00038 for (int i=0; i<k; i++) v[i] = w[i];
00039 delete [] w;
00040 }
00041 v[k++] = a;
00042 }
00043 };
00044
00045 #endif