代码:
#include <iostream>
#include <cstring>
using namespace std;
template <typename T>
class Stack{
private :
T* data; /// 给指针分配一个内存空间
int sz; /// 动态数组的大小
int len; /// 栈的元素个数
public :
Stack(){
data=new T[1]; /// 构造函数
sz=1;
len=0;
}
~Stack(){
if(data!=NULL) {
delete[] data;
data=NULL;
}
cout<<"析构函数"<<endl;
}
void clear(){
if(data!=NULL){
delete[] data;
data=NULL;
sz=1;
len=0;
}
/// 清空操作
}
int size(){
return len;
}
void push(const T& a){
if(len+1<sz){
data[len++]=a;
} else {
sz=sz*2+1;
T* newdata=new T[2*sz+1];
memcpy(newdata,data,sizeof(data));
/// 当前空间不足,开两倍
delete[] data;
data=newdata;
data[len++]=a;
}
}
int top(){
if(len==0) {
cout<<"Error"<<endl;
return -1;
}
return data[len-1];
}
void pop(){
len--;
}
};
int main(){
Stack<int> *s=new Stack<int>();
s->push(1);
s->push(2);
cout<<s->top()<<endl;
s->pop();
cout<<s->top()<<endl;
s->clear();
delete s;
}