C++ 链表的迭代器问题

图片描述

尾后end(),到底要怎么算。
iterator(nullptr);
如果是空,这样就不能递减,

iterator(lastNode);
如果是尾指针,这样就少了一个节点。

双向链表的end(),要怎么写

阅读 1.7k
1 个回答

libstdc++ 中的 std::list 用一个没有数据的头节点_M_node,把整个双向链表连成了一个环。

_M_node->_M_next 是第一个节点,_M_node->_M_prev 是最后一个节点。

于是,

      iterator
      begin() _GLIBCXX_NOEXCEPT
      { return iterator(this->_M_impl._M_node._M_next); }

      iterator
      end() _GLIBCXX_NOEXCEPT
      { return iterator(&this->_M_impl._M_node); }

参见: https://github.com/gcc-mirror...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题