#include <iostream>
using namespace std;
#define MAXSIZE 10
template<typename T>
class Stack
{
public:
Stack();
Stack(int size);
int push(T d);
int pop();
int output();
~Stack();
private:
int top;
T* ptr = nullptr;
int size;
};
template<typename T>
Stack<T>::Stack():ptr(new T[MAXSIZE]), top(-1), size(MAXSIZE)
{
cout << "Stack无参构造" << endl;
}
template<typename T>
Stack<T>::Stack(int size):top(-1), size(size)
{
this->ptr = new T[size];
cout << "Stack无参构造" << endl;
}
template<typename T>
int Stack<T>::push(T d)
{
if (this->top == MAXSIZE-1)
{
cout << "栈满" << endl;
return -1;
}
this->ptr[++this->top] = d;
return 0;
}
template<typename T>
int Stack<T>::pop()
{
if (this->top == -1)
{
cout << "栈空" << endl;
return -1;
}
//cout << this->ptr[this->top--] << endl;
return 0;
}
template<typename T>
int Stack<T>::output()
{
if (this->top == -1)
{
cout << "栈空" << endl;
return -1;
}
for (int i=0 ; i < top ; i++)
{
cout << this->ptr[i] << endl;
}
return 0;
}
template<typename T>
Stack<T>::~Stack()
{
delete [] ptr;
cout << "Stack析构函数" << endl;
}
int main()
{
Stack<int> s;
s.push(1);
s.push(3);
s.push(3);
s.push(3);
s.push(8);
s.push(6);
s.push(4);
s.pop();
s.output();
cout << "Hello World!" << endl;
return 0;
}