栈的C++模板实现,能够支持不同类型的元素

这篇博客介绍了如何使用C++模板实现一个栈,该栈能够支持不同类型的元素。通过动态内存分配和指针数组来存储元素,确保元素不连续但指针连续。博客提到了栈的上溢和下溢异常处理,并详细说明了push、pop、getsize、isfull和isempty等对外接口的实现。特别地,pop操作的设计旨在避免在析构函数中抛出异常,以防止不必要的问题。此外,文章指出栈没有实现复制构造函数。
摘要由CSDN通过智能技术生成
#pragma once
#include <exception>
using namespace std;

class underflow : public exception
{
	const char * what() const
	{
		return "栈下溢";
	}
};
class overflow : public exception
{
	const char * what() const
	{
		return "栈上溢";
	}
};

template <class T> class mystack {
public:
	mystack(int s) :size(s) { top = new T*[size]; base = top; };//构造大小为s的栈
	mystack() :size(12) { top = new T*[size]; base = top; };//重载,默认栈大小为12
	~mystack();
	int push(T&);//对外的入栈接口
	T pop();//对外的出栈接口,包括了抛出异常
	int getsize() { return size; };
	bool isfull() { return (top == &base[size - 1]); }
	bool isempty() { return empty; }
private:
	const int size;
	T**top;
	T**base;
	bool empty=1;
protected:
	T popr() ;//真正的pop函数,但不包括抛出异常,这是为了能够在析构函数中调用
};

template <class T> mystack<T>::~mystack()
{
	while (!empty)popr();
	delete[]base;
}


template <class T> int mystack<T&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值