我的假设是,在std::list<>
中,列表本身的swap
函数是通过交换锚节点完成的。该节点可以访问前一个节点并轻松更新前一个节点的下一个指针,以指向另一个列表的锚点;但是这不能在std::forward_list
中完成(当然,这可能非常昂贵)。std :: forward_list在C++中的swap()实现11
如果我的假设是正确的,swap()
如何以有效的方式在std::forward_list
中实现?而我们在这个时候,swap()
如何实现的std::forward_list
?
我的印象是'std :: list'在内部是一个循环列表,我假设'std :: forward_list'是一样的。我猜测这完全取决于实施。 – Samaursa
即使它们是循环链表,仍然不需要更新节点上的任何指针。整个列表正在交换,因此没有任何节点链接会改变。所有这些变化都是从std :: list到节点的指针。 – bames53
@ bames53:如果它是一个循环列表,那么每个节点都指向下一个节点或列表的尾部。而列表尾部指向头部,而头部又指向第一个元素。那么如何交换尾指针,因为您需要调整指向尾部的节点,并且除非遍历整个列表,否则无法到达尾指针。或者尾指针是指向头部以及最后一个节点的对象? – Samaursa