-----Test.h文件-----------------------------------------
#ifndef TEST_H#define TEST_H#includeusing namespace std;template class CMyStack{private: struct Item { public: T data; Item *next; Item():next(NULL){} }; Item *m_data; Item *m_min; CMyStack(const CMyStack&); CMyStack& operator=(const CMyStack&);public: CMyStack(); ~CMyStack(); T &top(); bool empty(); void pop(); void push(const T &); const T &min();};template CMyStack ::CMyStack():m_data(NULL),m_min(NULL){}template CMyStack ::~CMyStack(){ if(m_data!=NULL) { Item *p,*q; p=m_data; q=NULL; while(p!=NULL) { q=p; p=p->next; delete q; } }}template T& CMyStack ::top(){ if(!empty()) return m_data->data; else throw exception("stack is empty");}template bool CMyStack ::empty(){ if(m_data==NULL) return true; else return false;}template void CMyStack ::pop(){ if(!empty()) { Item *p=m_data; m_data=m_data->next; delete p; p=m_min; m_min=m_min->next; delete p; } else { throw exception("stack is empty"); }}template void CMyStack ::push(const T &t){ Item *p=new Item(); p->data=t; Item *q=new Item; if(!empty()) { if(t>m_min->data) { q->data=m_min->data; } else q->data=t; } else { q->data=t; } q->next=m_min; m_min=q; p->next=m_data; m_data=p;}template const T &CMyStack ::min(){ if(!empty()) { return m_min->data; } else { throw exception("stack is empty"); }}#endif
----------------------main.cpp中的调用-----------------------------------------------
void main(){ CMyStack myStack; int a; for(int i=0;i<5;i++) { cin>>a; myStack.push(a); cout<<"min:"<<