注意清空栈的方法#include<iostream> using namespace std; template<class T> class ArrayStack { private: int size;//栈的大小 int tos;//栈顶索引 T*contain; public: ArrayStack():size(0),tos(-1),contain(NULL){} ArrayStack(int maxsize); ~ArrayStack(); void Push(const T&element); T& GetTop(); T&Pop(); bool IsEmpty(); void MakeEmpty(); }; template<class T> ArrayStack<T>::ArrayStack(int maxsize) { size=maxsize; tos=-1; contain=new T[maxsize]; } template<class T> ArrayStack<T>::~ArrayStack() { delete contain; tos=-1; size=0; } template<class T> void ArrayStack<T>::Push(const T&element) { if(tos==size-1) { cout<<"栈已经满"<<endl; return; } else { tos++; contain[tos]=element; } } template<class T> T& ArrayStack<T>::GetTop() { if(tos==-1) { int i=0; cout<<"栈为空"<<endl; return i; } return contain[tos]; } template<class T> T& ArrayStack<T>::Pop() { if(tos==-1) { int i=0; cout<<"栈为空"<<endl; return i; } else { return contain[tos--]; } } template<class T> bool ArrayStack<T>::IsEmpty() { if(tos==-1) return true; else return false; } template<class T> void ArrayStack<T>::MakeEmpty() { delete contain; tos=-1; size=0; } int main() { ArrayStack<int>*s=new ArrayStack<int>(20); s->Push(2); s->Push(3); s->Push(4); while(!s->IsEmpty()) { int i=s->Pop(); cout<<i<<endl; } s->MakeEmpty(); if(s->IsEmpty()) { cout<<"栈为空"<<endl; } return 0; }