#include<iostream>
#include<cassert>
#include<stdlib.h>
#include<string>
#include<fstream>
using namespace std;
template<typename T>
class Stack
{
public:
Stack();
Stack(int);
T pop();
T top();
void push(T);
bool empty();
int getSize();
void clear();
~Stack();
private:
T *stack;
int size;
int topptr;
int bottomptr;
};
template<typename T>
Stack<T>::Stack()
{
stack = new T[0];
topptr = -1;
bottomptr = -1;
}
template<typename T>
Stack<T>::Stack(int n)
{
if(n<0) exit(0);
stack = new T[size = n];
topptr = -1;
bottomptr = -1;
}
template<typename T>
Stack<T>::~Stack()
{
delete []stack;
}
template<typename T>
void Stack<T>::push(T elem)
{
if(topptr < (size-1) )
stack[++topptr] = elem;
else
{
exit(0);
}
}
template<typename T>
T Stack<T>::top()
{
return stack[topptr];
}
template<typename T>
T Stack<T>::pop()
{
return stack[topptr--];
}
template<typename T>
int Stack<T>::getSize()
{
return size;
}
template<typename T>
bool Stack<T>::empty()
{
if(topptr == -1)
return true;
return false;
}
template<typename T>
void Stack<T>::clear()
{
topptr = -1;
}
/************************************************************************/
class Student
{
public:
Student();
Student(string, int);
void setName(string n);
string getName();
void setAge(int a);
int getAge();
private:
string name;
int age;
};
Student::Student()
{
name = "";
age = 0;
}
Student::Student(string n, int a)
{
name = n;
age = a;
}
void Student::setName(string n)
{
name = n;
}
string Student::getName()
{
return name;
}
void Student::setAge(int a)
{
age = a;
}
int Student::getAge()
{
return age;
}
/************************************************************************/
void test()
{
ifstream cin("in.txt");
Stack<Student> stack(10);
string name;
int age;
for(int i=0; i<4; i++)
{
cin >> name >> age;
Student obj(name, age);
stack.push(obj);
}
while(!stack.empty())
{
Student elem = stack.pop();
cout << elem.getName() << " " << elem.getAge() << endl;
}
//在此处加main函数内test后面的代码会出错
stack.clear();
}
int main()
{
test();
/*******************测试部分*********************/
int n;
cin >> n;
Stack<int> stack(n);
while(n--)
{
int x;
cin >> x;
stack.push(x);
}
while(!stack.empty())
cout << stack.pop() << " ";
/*********************************************/
return 0;
}
用模板写的堆栈类
最新推荐文章于 2021-01-14 11:00:14 发布