标准类库 queue模板类的简单实现

来源:互联网 发布:托福网络培训班 编辑:程序博客网 时间:2024/06/05 23:53

最近学模板,于是就简单做了个 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_ttheSize ;} ;


原创粉丝点击