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
也不会让你这样做,因为它会先从旧列表中删除项目,然后再将它们放入新列表中。
如果你想测试循环检测算法,你必须编写你自己的链表类型,允许人们在其中创建循环。
我正在研究 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
也不会让你这样做,因为它会先从旧列表中删除项目,然后再将它们放入新列表中。
如果你想测试循环检测算法,你必须编写你自己的链表类型,允许人们在其中创建循环。