📄 linkedlistiterext.h
字号:
/* $Id: LinkedListIterExt.h,v 1.2 1997/02/02 01:31:04 matt Exp $ Extended linked list iterator with insert/remove. (c) Apr 95 Matt Phillips. */#ifndef _LLISTXI_H#define _LLISTXI_H#include "LinkedList.h"// NOTE: this iterator can be used on any class derived from the// LinkedList class, but ensure first that it does not cause itegrity// violations. Some alternative extended iterators exist for classes// where this iterator is not appropriate. template <class T, class E>class LinkedListImpIterExt : public LinkedListImpIter<T, E>{public: LinkedListImpIterExt (LinkedListImp<T, E> &l) : prev (0), LinkedListImpIter<T, E> (l) {} int hasPrev () const {return prev != 0;} T &refPrev () const {CHECK (prev, "null prev reference"); return prev->ref ();} virtual void reset () {LinkedListImpIter<T, E>::reset (); prev = 0;} virtual void operator ++ (int) {prev = i; LinkedListImpIter<T, E>::operator ++ (0);} // insert t before current item void insert (T &t) { ITER_CURRENT (prev); E *e = new E (t, i); if (prev) { prev->next = e; prev = e; } else setHead (e); incNItems (); } // remove current item (current item = next afterwards) void remove (); protected: E *prev;};template <class T, class E>void LinkedListImpIterExt<T, E>::remove (){ ITER_CURRENT (i); // check for valid iterator E *next = i->next; if (prev) prev->next = i->next; else setHead (i->next); delete i; i = next; decNItems ();}#define TypeDLinkedListIterExt(T) LinkedListImpIterExt<T, DLinkedItem <T> >#define TypeILinkedListIterExt(T) LinkedListImpIterExt<T, ILinkedItem <T, 0> >#define TypeIOLinkedListIterExt(T) LinkedListImpIterExt<T, ILinkedItem <T, 1> >#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -