提问者:小点点

使用std::list创建循环链表?


所以,我一直在想,是否有一种方法可以用C++中的std::list创建一个循环链表。 我似乎想不出一种方法让最后一个元素指向第一个元素。 有没有人能做到这一点?


共2个答案

匿名用户

Std::list接口不支持循环列表,其中first.prev是指向last的指针,last.next是指向First的指针。

您不能递减std::list::begin()返回的迭代器。 更一般地,您不能递减由std::。。。::begin()返回的任何迭代器。

递增由std::List::back()返回的迭代器会得到一个迭代器==std::List::End()(对于std::。。。::back()一般情况下也是如此)。

如果您很好奇,Visual Studio template在内部实现了std::List,它使用虚拟节点作为循环双重链接列表的一部分。 dummy.next指向第一个,dummy.prev指向最后一个,first.prev==last.next==指向dummy节点的指针,但这不允许您将其视为常规的循环双重链表。

匿名用户

不,没有。

std::list不允许您自己控制链接。 该列表为您控制链接。 您不能自定义它们。

注意,如果您可以自定义列表中的链接,那么列表中的函数很可能无法正常工作。 例如,如果您迭代一个循环列表,您将永远不会完成!