汎用キューヘッダファイルC++
2067 ワード
// queue.h
#ifndef QUEUE_H_
#define QUEUE_H_
#include
template
class Queue ;
template
std ::ostream & operator << (std ::ostream & os, const Queue & queue)
{
os << "< " ;
QueueItem * scan = queue.m_head ;
while (scan != NULL)
{
os << scan ->m_item << " " ;
scan = scan ->m_next ;
}
os << ">" ;
return os ;
}
template
std ::istream & operator >> (std ::istream & is, Queue & queue)
{
T input ;
while (is >> input)
{
queue.push(input) ;
}
is.clear() ;
return is ;
}
template
class QueueItem
{
friend class Queue ;
friend std ::ostream & operator << (std ::ostream & os, const Queue & queue) ;
friend std ::istream & operator >> (std ::istream & is, Queue & queue) ;
private:
T m_item ;
QueueItem * m_next ;
QueueItem (const T & item): m_item(item), m_next(0) {}
} ;
template
class Queue
{
friend std ::ostream & operator << (std ::ostream & os, const Queue & queue) ;
friend std ::istream & operator >> (std ::istream & is, Queue & queue) ;
private:
QueueItem * m_head ;
QueueItem * m_tail ;
void m_copyElement (const Queue & queue) ;
template void m_copyElement (Iter, Iter) ;
void m_destroy (void) ;
public:
template Queue (Iter, Iter) ;
Queue (void): m_head(0), m_tail(0) {}
Queue (const Queue & queue) ;
Queue & operator = (const Queue & qeueue) ;
~Queue (void) ;
template 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