std::forward_list是否可以存在循环?

Can a cycle exist in an std::forward_list?

我正在研究 Floyd 的 Tortoise and Hare algorithm,并尝试使用 std::forward_list 对问题建模。具体来说,我想使用 std::forward_list 有意创建一个循环,并使用所述算法检测它。

(根据下面的评论,无需破解界面;即使用 std::forward_list 界面创建循环。)

"problem"就是这个好像不行。我查看了构造函数和修改器方法。据我所知,std::forward_list 的接口阻止了此类循环的发生。这通常是一件好事,除非您正在准备面试,并且想有目的地实施一个 forward_list 循环 :^)

是否可以在 std::forward_list 中创建一个循环?

参考文献:

How to detect a loop in a linked list?
http://en.cppreference.com/w/cpp/container/forward_list
http://codingfreak.blogspot.com/2012/09/detecting-loop-in-singly-linked-list_22.html

forward_list(和 list)的界面专门设计用于向用户隐藏节点和节点指针的详细信息。它们在设计和抽象上没有循环。

所以不,他们不给你创建格式错误列表的自由。即使使用 splice 也不会让你这样做,因为它会先从旧列表中删除项目,然后再将它们放入新列表中。

如果你想测试循环检测算法,你必须编写你自己的链表类型,允许人们在其中创建循环。