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...

推荐问题