一个简单的模板数组

</pre><pre name="code" class="cpp">#include <iostream>
#include <string>
template <class Type>
class Stack {
private:
	Type * items; // holds stack items
	int top; // index for top stack item
public:
	Stack();
	Stack(Type, int);
	~Stack();
	Stack<Type> & operator=(Stack<Type> & st);
	void operator++();
	void operator--();
	void push(const Type & item); // add item to stack
	bool isempty();
	void showAll();
};

template <class Type>
Stack<Type>::Stack() : items(0), top(0) {}

template <class Type>
Stack<Type>::Stack(Type T, int n) : top(n) {
	items = new Type[n];
	for (int i = 0; i < n; ++i) {
		items[i] = T;
	}
}

template <class Type>
Stack<Type>::~Stack() {
	delete[] items;
}

template <class Type>
Stack<Type> & Stack<Type>::operator=(Stack<Type> & st) {
	top = st.top;
	delete[] items;
	items = new Type[top];
	for (int i = 0; i < top; ++i)
		items[i] = st.items[i];
	return *this;
}

template <class Type>
void Stack<Type>::operator++() {
    Stack<Type> t;
	t = *this;
	++top;
	delete[] items;
	items = new Type[top];
	for (int i = 0; i < (top - 1); ++i)
		items[i] = t.items[i];
    items[top - 1] = 0;
}

template <class Type>
void Stack<Type>::operator--() {
    Stack<Type> t;
	t = *this;
	--top;
	delete[] items;
	items = new Type[top];
	for (int i = 0; i < (top - 1); ++i)
		items[i] = t.items[i];
}

template <class Type>
void Stack<Type>::push(const Type & item) {
	++*this;
	items[top - 1] = item;
}

template <class Type>
bool Stack<Type>::isempty() {
	return top == 0;
}

template<class Type>
void Stack<Type>::showAll() {
	for (int i = 0; i < top; ++i) {
		std::cout << items[i] << " ";
		if ((i + 1) % 4 == 0)
            std::cout << std::endl;
	}
}

int main() {
	Stack<std::string> ty("hello world! ", 10);
	ty.showAll();
	ty.push("Thank you.");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值