📄 dbllinklist.h
字号:
/* $Id: DblLinkList.h,v 1.2 1997/02/02 01:31:03 matt Exp $ Double-linked list class. (c) Mar 95 Matt Phillips.*/#ifndef _DLLIST_H#define _DLLIST_H#include "Container.h"#include "Data.h"template <class T, class E>class DblLinkListImp : public Container<T>{public: typedef DblLinkListImpIter<T, E> Iterator; DblLinkListImp () {head = 0;} ~DblLinkListImp () {clear ();} virtual const char *name () const {return "DblLinkList";} virtual void add (T &i); virtual void clear (); virtual Iterator *makeIter () const {return new Iterator (*this);} protected: friend Iterator; E *head;};template <class T, class E>class DblLinkListImpIter : public RContainerIter<T>{public: DblLinkListImpIter (const DblLinkListImp<T, E> &l) : list (l) {reset ();} virtual void resetStart () {i = list.head;} virtual void resetEnd () {REPORT ("cannot resetEnd on DblLinkList");} virtual operator int () const {return int (i);} virtual void operator ++ (int) {ITER_BOUND (i); i = i->next;} virtual void operator -- (int) {ITER_BOUND (i); i = i->prev;} virtual T value () const {ITER_BOUND (i); return i->ref ();} virtual T &ref () {ITER_BOUND (i); return i->ref ();} protected: E *i; const DblLinkListImp<T, E> &list;};template <class T, class E>void DblLinkListImp<T, E>::clear (){ E *i, *next; for (i = head; i; i = next) { next = i->next; i->destroy (); delete i; } head = 0; _nItems = 0;}template <class T, class E>void DblLinkListImp<T, E>::add (T &d){ E *i = new E (d); if (head) head->prev = i; i->next = head; i->prev = 0; head = i; _nItems++;}#define TypeDDblLinkList(T) DblLinkListImp<T, DDoubleLinkItem<T> >#define TypeIODblLinkList(T) DblLinkListImp<T, IDoubleLinkItem<T, 1> >#define TypeIDblLinkList(T) DblLinkListImp<T, IDoubleLinkItem<T, 0> >#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -