📄 linkedlistwithtailiterext.h
字号:
/* $Id: LinkedListWithTailIterExt.h,v 1.2 1997/02/02 01:31:05 matt Exp $ Extended linked list with tail iterator with insert/remove. (c) Aug 95 Matt Phillips. */#ifndef _LLISTTXI_H#define _LLISTTXI_H#include "LinkedListWithTail.h"// NOTE: this class cannot inherit from the LinkedListExtIter class// because then it would not have access to the LinkedListWithTail// class' tail member via the LinkedListWithTailIter class.template <class T, class E>class LinkedListWithTailImpIterExt : public LinkedListWithTailImpIter<T, E>{public: LinkedListWithTailImpIterExt (LinkedListWithTailImp<T, E> &l) : prev (0), LinkedListWithTailImpIter<T, E> (l) {} int hasPrev () const {return prev != 0;} T &refPrev () const { CHECK (prev, "null prev reference"); return prev->ref (); } virtual void reset () { LinkedListWithTailImpIter<T, E>::reset (); prev = 0; } virtual void operator ++ (int) { prev = i; LinkedListWithTailImpIter<T, E>::operator ++ (0); } // insert t before current item void insert (T &t); // remove current item (current item = next afterwards) void remove (); protected: E *prev;};template <class T, class E>void LinkedListWithTailImpIterExt<T, E>::insert (T &t){ ITER_CURRENT (prev); E *e = new E (t, i); if (prev) { prev->next = e; prev = e; } else setHead (e); incNItems ();}template <class T, class E>void LinkedListWithTailImpIterExt<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 (); if (i->next == 0) setTail (prev);}#define TypeDLinkedListWithTailIterExt(T) LinkedListWithTailImpIterExt<T, DLinkedItem<T> >#define TypeILinkedListWithTailIterExt(T) LinkedListWithTailImpIterExt<T, ILinkedItem<T, 0> >#define TypeIOLinkedListWithTailIterExt(T) LinkedListWithTailImpIterExt<T, ILinkedItem<T, 1> >#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -