c++ 双向链表迭代器 代码

来源:互联网 发布:二手家具市场淘宝 编辑:程序博客网 时间:2024/05/22 10:27

#ifndef __LISTITERATOR_H__
#define __LISTITERATOR_H__

 

namespace xxx

{
 template <typename T>
 struct ListNode_t;

 /** @addtogroup 基础件
 * 
 *  @{
 */

 /** @addtogroup 容器
 * 
 *  @{
 */

 /*!
 * @brief 列表迭代器
 */
 template <typename T>
 struct ListIterator_t
 {
  ListNode_t <T> * m_pNode;

  /*!
  * @brief 构造函数
  */
  ListIterator_t()
  {
   m_pNode = 0;
  }

  /*!
  * @brief 构造函数
  */
  ListIterator_t(const ListIterator_t <T> &it)
  {
   m_pNode = it.m_pNode;
  }

  /*!
  * @brief 构造函数
  */
  ListIterator_t(ListNode_t <T> *pNode)
  {
   m_pNode = pNode;
  }

  /*!
  * @brief 获得迭代器的元素引用
  */
  T& operator *()
  {
   return m_pNode->m_value;
  }

  /*!
  * @brief 获得迭代器的元素引用
  */
  const T& operator *() const
  {
   return m_pNode->m_value;
  }

  /*!
  * @brief 获得迭代器的元素指针
  */
  T* operator ->()
  {
   return &m_pNode->m_value;
  }

  /*!
  * @brief ++后置操作符
  */
  ListIterator_t& operator ++()
  {
   m_pNode = m_pNode->m_pNext;
   return *this;
  }

  /*!
  * @brief ++前置操作符
  */
  ListIterator_t operator ++(int)
  {
   ListIterator_t _it = *this;
   m_pNode = m_pNode->m_pNext;
   return _it;
  }

  /*!
  * @brief --后置操作符
  */
  ListIterator_t& operator --()
  {
   m_pNode = m_pNode->m_pPrevious;
   return *this;
  }

  /*!
  * @brief --前置操作符
  */
  ListIterator_t operator --(int)
  {
   ListIterator_t _it = *this;
   m_pNode = m_pNode->m_pPrevious;
   return _it;
  }

  /*!
  * @brief 判断是否为同一个迭代器
  */
  inline bool operator ==(const ListIterator_t &it) const
  {
   return m_pNode == it.m_pNode;
  }

  /*!
  * @brief 判断是否不为同一个迭代器
  */
  inline bool operator !=(const ListIterator_t &it) const
  {
   return m_pNode != it.m_pNode;
  }

  /*!
  * @brief 设置为另一个迭代器
  */
  ListIterator_t & operator =(const ListIterator_t &it)
  {
   m_pNode = it.m_pNode;
   return *this;
  }
 };

 /*!
 * @brief 列表反向迭代器
 */
 template <typename T>
 struct ListReverseIterator_t
 {
  ListNode_t <T> * m_pNode;

  /*!
  * @brief 构造函数
  */
  ListReverseIterator_t()
  {
   m_pNode = 0;
  }

  /*!
  * @brief 构造函数
  */
  ListReverseIterator_t(const ListReverseIterator_t <T> &it)
  {
   m_pNode = it.m_pNode;
  }

  /*!
  * @brief 构造函数
  */
  ListReverseIterator_t(ListNode_t <T> *pNode)
  {
   m_pNode = pNode;
  }

  /*!
  * @brief 获得迭代器的元素引用
  */
  T& operator *()
  {
   return m_pNode->m_value;
  }

  /*!
  * @brief 获得迭代器的元素引用
  */
  const T& operator *() const
  {
   return m_pNode->m_value;
  }

  /*!
  * @brief 获得迭代器的元素指针
  */
  T *operator ->()
  {
   return &m_pNode->m_value;
  }

  /*!
  * @brief ++后置操作符
  */
  ListReverseIterator_t& operator ++()
  {
   m_pNode = m_pNode->m_pPrevious;
   return *this;
  }

  /*!
  * @brief ++前置操作符
  */
  ListReverseIterator_t operator ++(int)
  {
   ListReverseIterator_t _it = *this;
   m_pNode = m_pNode->m_pPrevious;
   return _it;
  }

  /*!
  * @brief --后置操作符
  */
  ListReverseIterator_t& operator --()
  {
   m_pNode = m_pNode->m_pNext;
   return *this;
  }

  /*!
  * @brief --前置操作符
  */
  ListReverseIterator_t operator --(int)
  {
   ListReverseIterator_t _it = *this;
   m_pNode = m_pNode->m_pNext;
   return _it;
  }

  /*!
  * @brief 判断是否为同一个迭代器
  */
  inline bool operator ==(const ListReverseIterator_t &it) const
  {
   return m_pNode == it.m_pNode;
  }

  /*!
  * @brief 判断是否不为同一个迭代器
  */
  inline bool operator !=(const ListReverseIterator_t &it) const
  {
   return m_pNode != it.m_pNode;
  }

  /*!
  * @brief 设置为另一个迭代器
  */
  ListReverseIterator_t& operator =(const ListReverseIterator_t &it)
  {
   m_pNode = it.m_pNode;
   return *this;
  }
 };

 /** @} */ // end of 容器

 /** @} */ // end of 基础件
}

#endif