⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d_liter.h

📁 这是数据结构和算法的国外经典书籍.清华大学出版社出版的<数据结构C++语言描述-应用模板库STL>陈君 译 英文名称是Data Structures with C++ Using STL.
💻 H
字号:
#ifndef MINILIST_ITERATOR_CLASSES
#define MINILIST_ITERATOR_CLASSES

// these classes do not stand alone. the miniList
// class includes this file in its public section

// necessary so iterator classes can access private section
// of miniList
class iterator;
class const_iterator;

friend class iterator;
friend class const_iterator;

// miniList class iterator implementation
class iterator
{
   public:
      friend class miniList<T>;

      // needed by the const_iterator constructor
      // that converts a const iterator to a const_iterator
      friend class const_iterator;

      // constructor
      iterator() {}

      // equality for iterators
      bool operator==
         (const iterator& rhs) const
      {
         // iterators equal if they point to same node
         return nodePtr == rhs.nodePtr;
      }

      // inequality for iterators
      bool operator!=
         (const iterator& rhs) const
      {
         // iterators unequal if they point to different nodes
         return nodePtr != rhs.nodePtr;
      }

      // pointer dereference operator
      T& operator* ()
      {
         // if the node's successor is itself, the list is empty
         if (nodePtr->next == nodePtr)
 				throw
				  referenceError("miniList iterator: reference error");

         return nodePtr->nodeValue;
      }

      // prefix increment. move forward one node
      iterator& operator++ ()
      {
			// move to the successor of nodePtr
			nodePtr = nodePtr->next;

         return *this;  // return new iterator value
      }

      // postfix increment. move forward one node
      iterator operator++ (int)
      {
			// save the current value of the iterator
         iterator tmp = *this;

			// move to the successor of nodePtr
         nodePtr = nodePtr->next;

         return tmp; // return original iterator value
      }

      // prefix decrement. move back one node
      iterator& operator-- ()
      {
			// move to the predecessor of nodePtr
			nodePtr = nodePtr->prev;

         return *this;  // return new iterator value
      }

      // postfix decrement. move back one node
      iterator operator-- (int)
      {
			// save the current value of the iterator
         iterator tmp = *this;

			// move to the predecessor of nodePtr
         nodePtr = nodePtr->prev;

         return tmp; // return original iterator value
      }

   private:
      // pointer to the current list node
      dnode<T> *nodePtr;

		// private constructor. converts p to an iterator
		// by assigning p to nodePtr
		iterator(dnode<T> *p): nodePtr(p)
		{}

};

// type is const_iterator, the list referred to is
// constant and * returns a constant reference
class const_iterator
{
   public:
      friend class miniList<T>;

      const_iterator() {}

      // converts const iterator --> const_iterator
      const_iterator(const iterator& obj)
      {
         nodePtr = obj.nodePtr;
      }

      bool operator==
         (const const_iterator& rhs) const
      {
         return nodePtr == rhs.nodePtr;
      }

      bool operator!=
         (const const_iterator& rhs) const
      {
         return nodePtr != rhs.nodePtr;
      }

      const T& operator* () const
      {
         // if the node's successor is itself, the list
			// is empty
         if (nodePtr->next == nodePtr)
 				throw
				  referenceError("miniList iterator: reference error");

         return nodePtr->nodeValue;
      }

      // prefix increment. move forward one node
      const_iterator& operator++ ()
      {
			// move to the successor of nodePtr
			nodePtr = nodePtr->next;

         return *this;  // return new iterator value
      }

      // postfix increment. move forward one node
      const_iterator operator++ (int)
      {
			// save the current value of the iterator
         const_iterator tmp = *this;

			// move to the successor of nodePtr
         nodePtr = nodePtr->next;

         return tmp; // return original iterator value
      }

      // prefix decrement. move back one node
      const_iterator& operator-- ()
      {
			// move to the predecessor of nodePtr
			nodePtr = nodePtr->prev;

         return *this;  // return new iterator value
      }

      // postfix decrement. move forward one node
      const_iterator operator-- (int)
      {
			// save the current value of the iterator
         const_iterator tmp = *this;

			// move to the predecessor of nodePtr
         nodePtr = nodePtr->prev;

         return tmp; // return original iterator value
      }

   private:
      dnode<T> *nodePtr;

		// converts a dnode pointer to an const_iterator
		const_iterator(dnode<T> *p): nodePtr(p)
		{}

};

#endif	// MINILIST_ITERATOR_CLASSES

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -