C++模板的具体实例:队列模板

不仅函数可以使用模板,在一个自定义的类中同样可以使用模板。

如果我们用c++创建一个队列的类并实现队列的入队和出队功能,按照以往的方式,我们需要编译这一需求的代码。

#include<iostream>
using namespace std;
class Queue
{
	struct Node
	{
		int nVal;
		struct Node* pNext;
	};
	Node* pHead;
	Node* pEnd;
public:
	Queue();
	~Queue();
	void Push(int nVal1);
	int Pop();
};
int main()
{
	Queue q1;

	q1.Push(1);
	q1.Push(2);
	q1.Push(3);

	cout << q1.Pop() << endl;
	cout << q1.Pop() << endl;
	cout << q1.Pop() << endl;


	cout << endl;
	return 0;
}
Queue::Queue()
{
	Node* pHead=NULL;
	Node* pEnd=NULL;
}
Queue::~Queue()
{
	while(pHead!=NULL)
	{
		Node* pDel = pHead;
		pHead = pHead->pNext;
		delete pDel;
	}
}
void Queue::Push(int nVal1)
{
	Node* pTemp = new Node;
	pTemp->nVal = nVal1;
	pTemp->pNext = NULL;
	if (pHead == NULL)
	{
		pHead = pTemp;
	}
	else
	{
		pEnd->pNext = pTemp;
	}
	pEnd = pTemp;

}
int Queue::Pop()
{
	if (pHead == NULL) return 0;
	else
	{
		Node* pDel = pHead;
		pHead = pHead->pNext;
		int n = pDel->nVal;
		delete pDel;
		pDel = NULL;
		if (pHead == NULL) pEnd = NULL;
		return n;
	}

}

 66c45ce260114d8e8ccd4059c34d9aeb.png

 由于在队列类Queue中,nVal存储的int类型内容可以变动为其他类型,所以将int用模板T1替换即可。

#include<iostream>
#include<string>
using namespace std;

template<typename T1>
class Queue
{
	struct Node
	{
		T1 nVal;
		struct Node* pNext;
	};
	Node* pHead;
	Node* pEnd;
public:
	Queue()
	{
		Node* pHead = NULL;
		Node* pEnd = NULL;
	}
	~Queue()
	{
		while (pHead != NULL)
		{
			Node* pDel = pHead;
			pHead = pHead->pNext;
			delete pDel;
		}
	}
	void Push(T1 nVal1)
	{
		Node* pTemp = new Node;
		pTemp->nVal = nVal1;
		pTemp->pNext = NULL;
		if (pHead == NULL)
		{
			pHead = pTemp;
		}
		else
		{
			pEnd->pNext = pTemp;
		}
		pEnd = pTemp;

	}
	T1 Pop()
	{
		if (pHead == NULL) return 0;
		else
		{
			Node* pDel = pHead;
			pHead = pHead->pNext;
			T1 n = pDel->nVal;
			delete pDel;
			pDel = NULL;
			if (pHead == NULL) pEnd = NULL;
			return n;
		}

	}
};

int main()
{
	Queue<int> q1; Queue<double> q2; Queue<char> q3;

	q1.Push(1);
	q2.Push(2.1);
	q3.Push('a');

	cout << q1.Pop() << endl;
	cout << q2.Pop() << endl;
	cout << q3.Pop() << endl;

	cout << endl;
	return 0;
}

最后得出结果:

9d0f481c6abd477eb4c94bd2ad117622.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值