65,187
社区成员




//#include "stdafx.h"
#include<iostream>
#include<cassert>
using namespace std;
//注意这些
template<typename T>
class stack;
template<class T>
ostream& operator<<(ostream& output, const stack<T>&a);
///
template<typename T>class stack {
int top;
T *elements;
int maxsize;
public:
stack(int = 20);
~stack() { delete[]elements; }
void push(const T&x);
T pop();
T getelem(int i);
void makeempty() { top = -1; }
bool isempty()const { return top == -1; }
bool isfull()const { return top == maxsize - 1; }
//注意 操作符 后 的<T>
friend ostream &operator<< <T>(ostream&, const stack<T>&);
};
template<typename T>stack<T>::stack(int max) {
maxsize = max;
top = -1;
elements = new T[maxsize];
assert(elements != 0);
}
//没有什么改变
template<typename T>
ostream& operator<<(ostream& s, const stack<T>& s1)
{
for (int i = 0; i <= s1.top; i++) s << s1.elements[i] << ' ';
s << endl;
return s;
}
template<typename T>void stack<T>::push(const T&data) {
assert(!isfull());
elements[++top] = data;
}
template<typename T>T stack<T>::pop() {
assert(!isempty());
return elements[top--];
}
template<typename T>T stack<T>::getelem(int i) {
assert(i <= top&&i >= 0);
return elements[i];
}
int main()
{
stack<int> s;
s.push(1);
cout<< s << endl;
system("pause");
return 0;
}