泛型队列头文件C++

//	queue.h
#ifndef QUEUE_H_
#define QUEUE_H_

#include <iostream>

template<class T>
class Queue ;

template<class T>
std ::ostream & operator << (std ::ostream & os, const Queue<T> & queue)
{
	os << "< " ;
	QueueItem<T> * scan = queue.m_head ;
	while (scan != NULL)
	{
		os << scan ->m_item << " " ;
		scan = scan ->m_next ;
	}
	os << ">" ;

	return os ;
}

template<class T>
std ::istream & operator >> (std ::istream & is, Queue<T> & queue)
{
	T input ;
	while (is >> input)
	{
		queue.push(input) ;
	}
	is.clear() ;

	return is ;
}

template<class T>
class QueueItem
{
	friend class Queue<T> ;
	friend std ::ostream & operator << <T> (std ::ostream & os, const Queue<T> & queue) ;
	friend std ::istream & operator >> <T> (std ::istream & is, Queue<T> & queue) ;
private:
	T m_item ;
	QueueItem * m_next ;
	QueueItem (const T & item): m_item(item), m_next(0) {}
} ;

template<class T>
class Queue
{
	friend std ::ostream & operator << <T> (std ::ostream & os, const Queue<T> & queue) ;
	friend std ::istream & operator >> <T> (std ::istream & is, Queue<T> & queue) ;
private:
	QueueItem<T> * m_head ;
	QueueItem<T> * m_tail ;
	void m_copyElement (const Queue & queue) ;
	template<typename Iter> void m_copyElement (Iter, Iter) ;
	void m_destroy (void) ;
public:
	template<typename Iter> Queue (Iter, Iter) ;
	Queue (void): m_head(0), m_tail(0) {}
	Queue (const Queue<T> & queue) ;
	Queue & operator = (const Queue & qeueue) ;
	~Queue (void) ;
	template<typename Iter> void assign (Iter, Iter) ;
	bool isEmpty (void) const ;
	T & front (void) ;
	const T & front (void) const ;
	void push (const T & item) ;
	void pop (void) ;
} ;

#include "queue.cpp"

#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值