#include <iostream>
#include <string.h>
using namespace std;
//抽象模板类
template <class T>
class Stack {
public:
virtual void push(T const& obj) = 0;
virtual void pop() = 0;
virtual T top() const = 0;
virtual bool empty() = 0;
virtual int size() = 0;
};
/*------------------------数组实现 ------------------------*/
template <class T>
class Stack_by_array : public Stack <T> {
private:
T* elems;
int p; //栈顶指针
int maxSize; //最大容量
void expansion() { //扩容函数
T* tmp = elems;
maxSize *= 2; //每次增大两倍
elems = new T[maxSize];
memcpy(elems, tmp, sizeof(tmp)); //拷贝原先元素数据
delete(tmp);
}
public:
Stack_by_array() {
p = -1;
maxSize = 8; //默认大小设定为8,可随意变更
elems = new T[maxSize];
}
void push(T const& obj) {
if (size() == maxSize) { //达到容量上线便扩容
expansion();
}
elems[++p] = obj;
}
void pop() {
if (p < 0) {
c