#include<iostream>
using namespace std;
template <class T,int n>
class AnyStack
{
T m_tStack[n];
int m_nMaxElement;
int m_nTop;
public:
AnyStack():m_nMaxElement(n),m_nTop(0){}
int GetTop() {return m_nTop;}
bool Push(T);
bool Pop(T&);
};
template <class T,int n>
bool AnyStack <T,n>::Pop(T &elem)
{
if(m_nTop>0)
{
m_nTop--;
elem=m_tStack[m_nTop];
return true;
}
else
return false;
}
template <class T,int n>
bool AnyStack<T,n>::Push(T elem)
{
if(m_nTop<m_nMaxElement)
{
m_tStack[m_nTop]=elem;
m_nTop++;
return true;
}
else
return false;
}
int main()
{
int n=0;
char *s1;
AnyStack<int,10>iStack;
iStack.Push(4);
iStack.Push(8);
iStack.Push(12);
iStack.Pop(n);
cout<<"第一个出栈整数="<<n<<endl;
iStack.Pop(n);
cout<<"第二个出栈整数="<<n<<endl;
iStack.Pop(n);
cout<<"第三个出战整数="<<n<<endl;
AnyStack<char*,3>strStack;
strStack.Push("It's first string");
strStack.Push("Tt's second string");
strStack.Pop(s1);
cout<<"第一个出栈字符串="<<s1<<endl;
strStack.Pop(s1);
cout<<"第二个出栈字符串="<<s1<<endl;
return 0;
}
using namespace std;
template <class T,int n>
class AnyStack
{
T m_tStack[n];
int m_nMaxElement;
int m_nTop;
public:
AnyStack():m_nMaxElement(n),m_nTop(0){}
int GetTop() {return m_nTop;}
bool Push(T);
bool Pop(T&);
};
template <class T,int n>
bool AnyStack <T,n>::Pop(T &elem)
{
if(m_nTop>0)
{
m_nTop--;
elem=m_tStack[m_nTop];
return true;
}
else
return false;
}
template <class T,int n>
bool AnyStack<T,n>::Push(T elem)
{
if(m_nTop<m_nMaxElement)
{
m_tStack[m_nTop]=elem;
m_nTop++;
return true;
}
else
return false;
}
int main()
{
int n=0;
char *s1;
AnyStack<int,10>iStack;
iStack.Push(4);
iStack.Push(8);
iStack.Push(12);
iStack.Pop(n);
cout<<"第一个出栈整数="<<n<<endl;
iStack.Pop(n);
cout<<"第二个出栈整数="<<n<<endl;
iStack.Pop(n);
cout<<"第三个出战整数="<<n<<endl;
AnyStack<char*,3>strStack;
strStack.Push("It's first string");
strStack.Push("Tt's second string");
strStack.Pop(s1);
cout<<"第一个出栈字符串="<<s1<<endl;
strStack.Pop(s1);
cout<<"第二个出栈字符串="<<s1<<endl;
return 0;
}