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