C++模板实现栈

在编写通用类时,模板也允许使用参数化的常量。在堆栈的例子里,我们可以指定堆栈的大小并把它放在模板的声明语句里。

TemplateStack.h

//在模板声明语句里指定堆栈大小
template <class T,short sSize=100>
class Stack
{
public:
	Stack()
	{
		m_sPos=0;
	}
	~Stack(){}
	void Push(T value);
	T Pop();
	bool IsEmpty()
	{
		return m_sPos==0;
	}
	bool HasElements()
	{
		return m_sPos!=0;
	}
	bool IsFull()
	{
		return m_sPos==sSize;
	}
	long GetSize()
	{
		return sSize;
	}
private:
	T m_data[20];
	short m_sPos;
};


//template <class T,short sSize=20> //default template arguments are only allowed on a class template
template <class T,short sSize>
//void Stack<T>::Push(T value) //template argument list following class template name must list parameters in the order used in template parameter list
void Stack<T,sSize>::Push(T value)
{
	m_data[m_sPos++]=value;
}

template <class T,short sSize>
T Stack<T,sSize>::Pop()
{
	return m_data[--m_sPos];
}

main.cpp

#include "TemplateStack.h"
#include <iostream>
using namespace std;

int main()
{
	Stack<double,20> doubleStack;
	//Create a stack of doubles with a max size of 20 elements
	cout<<"doubleStack size is "<<doubleStack.GetSize()<<endl;
	doubleStack.Push(1.1);
	doubleStack.Push(2.2);
	doubleStack.Push(3.3);
	cout<<"The elements in the stack:"<<endl;
	while(doubleStack.HasElements())
	{
		cout<<doubleStack.Pop()<<endl;
	}
	cout<<endl;


	//a dynamic created stack
	Stack<long,10> *plongStack=new Stack<long,10>;
	cout<<"plongStack size is "<<plongStack->GetSize()<<endl;
	plongStack->Push(1000);
	plongStack->Push(2000);

	cout<<"The elements in the stack:"<<endl;
	while(plongStack->HasElements())
	{
		cout<<plongStack->Pop()<<endl;
	}
	delete plongStack;

	return 0;
}

//模板类的实现不能和声明分离的。
//并非所有编译器都支持export关键字,且性能太差。

运行结果:


但是不能动态设定该堆栈模板类中元素的最大长度?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值