类模板实现Queue

#include "stdafx.h"
#include <iostream>
using namespace std;
// 错误的例子
//template <class T> class ListItem;
//template <class T> class List {
//public:
// List<T> ();
// List<T> ( const List<T>& );
// List<T>& operator = (const List<T>&);
//
// ~List();
//
// void insert(ListItem* ptr, T value_);
// ListItem *find(T value_);
//
//private:
// ListItem *front;
// ListItem *end;
//};
template <class Type>
class QueueItem {
public:
QueueItem(const Type &t) : item(t), next(0) {}
Type item;
QueueItem *next;
};
template <class Type>
class Queue {
public:
Queue() : head(0),tail(0) {}
Queue(const Queue &Q):head(0), tail(0) {
copy_elems(Q);
}
template <class Type2> // 这里重新声明的目的是为了支持类型转换
Queue<Type>& operator=(const Queue<Type2>&);
~Queue() { destroy(); }
Type& front() { return head->item; }
const Type &front() const { return head->item; }
void push( const Type& );
void pop();
bool empty() const {
return head == 0;
}
private:
QueueItem<Type> *head;
QueueItem<Type> *tail;
void destroy();
void copy_elems(const Queue&);
};
template <class Type>
void Queue<Type>::push( const Type& val)
{
QueueItem<Type> *pt = new QueueItem<Type>(val);
if(empty())
head = tail = pt;
else {
tail->next = pt;
tail = pt;
}
}
template <class Type>
void Queue<Type>::pop()
{
QueueItem<Type>* p = head;
head = head->next;
delete p;
}
template <class Type>
void Queue<Type>::destroy()
{
while(!empty())
pop();
}
template <class Type>
void Queue<Type>::copy_elems(const Queue& orig)
{
for(QueueItem<Type>* pt = orig.head;pt;pt = pt->next)
push(pt->item);
}
template <class Type>
template <class Type2> // 这里重新声明的目的是为了支持类型转换
Queue<Type>& Queue<Type>::operator=( const Queue<Type2>& orig)
{
if((void*)this == (void*)&orig) {
*this;
}
Queue<Type2> tmp(orig);
destroy(); // delete

while(!tmp.empty())
{
push(tmp.front());
tmp.pop();
}
return *this;
}
int main()
{
Queue<int> qi;
short s = 43;
int i = 23;
qi.push(s);
qi.push(i);
Queue<float> ai;
ai = qi;
Queue<int> bi;
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值