12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #ifndef STACK_H
- #define STACK_H
- #include "../Exception.h"
- template<class T>
- class Stack
- {
- public:
- Stack()
- {
- pos = 0;
- capacity = 4;
- data = new T[capacity];
- }
-
- Stack(const Stack& orig)
- {
- pos = orig.pos;
- capacity = orig.capacity;
- data = new T[capacity];
- memcpy(data, orig.data, capacity * sizeof(T));
- }
-
- Stack& operator=(const Stack& orig)
- {
- delete[] data;
-
- pos = orig.pos;
- capacity = orig.capacity;
- data = new T[capacity];
- memcpy(data, orig.data, capacity * sizeof(T));
-
- return *this;
- }
-
- virtual ~Stack()
- {
- delete[] data;
- }
-
- int getSize()
- {
- return pos;
- }
-
- bool isEmpty()
- {
- return pos == 0;
- }
-
- void push(T t)
- {
- if(pos >= capacity)
- {
- int newCapacity = capacity * 2;
- T* t = new T[newCapacity];
- memcpy(t, data, capacity * sizeof(T));
- delete[] data;
- data = t;
- capacity = newCapacity;
- }
- data[pos] = t;
- pos++;
- }
-
- T pop()
- {
- if(pos == 0)
- {
- throw Exception("pop on empty stack");
- }
- return data[--pos];
- }
-
- T peek()
- {
- if(pos == 0)
- {
- throw Exception("peek on empty stack");
- }
- return data[pos - 1];
- }
- private:
- int capacity;
- int pos;
- T* data;
- };
- #endif
|