最近学模板,于是就简单做了个 queue 模板类,没啥技巧性,见笑了……
/* THE PROGRAM IS MADE BY PYY */
#include <iostream>
using namespace std ;
//////////////////////////////////////////////////////////////////////////
//
// Decleration
//
template <class T>
class QueueItem ;
template <class T>
class Queue ;
//////////////////////////////////////////////////////////////////////////
//
// QueueItem
//
template <class T>
class QueueItem {
friend class Queue<T> ;
private:
T elem ;
QueueItem *prev ;
QueueItem *next ;
QueueItem (const T &t = *(new T), QueueItem *p = 0, QueueItem *n = 0)
: elem(t), prev(p), next(n) {}
} ;
//////////////////////////////////////////////////////////////////////////
//
// Queue
//
template <class T>
class Queue {
public:
Queue () : head(new QueueItem<T>), tail(new QueueItem<T>), theSize(0) {
head->next = tail ;
tail->prev = head ;
}
~Queue () { delete head ; delete tail ; }
bool empty () const { return head->next == tail; }
size_t size() const { return theSize ; }
void push (const T &t) {
QueueItem<T> *p = new QueueItem<T>(t, tail->prev, tail) ;
tail->prev->next = p ;
tail->prev = p ;
++theSize ;
}
T & front () { return head->next->elem ; }
const T & front () const { return head->next->elem ; }
T & back () { return tail->prev->elem ; }
const T & back () const { return tail->prev->elem ; }
void pop () {
if (empty())
return ;
QueueItem<T> *poldest = head->next ;
head->next = poldest->next ;
delete poldest ;
--theSize ;
}
private:
QueueItem<T> *head ;
QueueItem<T> *tail ;
size_t theSize ;
} ;