Я изучаю Floyd's Tortoise and Hare algorithm и пытаюсь смоделировать проблему, используя std :: forward_list. В частности, я хотел бы преднамеренно создать цикл с использованием std::forward_list
и обнаружить его с помощью упомянутого алгоритма.Может ли цикл существовать в std :: forward_list?
(Per комментариев ниже, без взлома интерфейса,. То есть, использовать интерфейс std::forward_list
создать цикл)
«Проблема» в том, что это не представляется возможными. Я рассмотрел конструкторы и методы мутаторов. Насколько я могу судить, интерфейс 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
Поскольку std :: forward_list обычно является шаблоном, вы можете создать код или шаблон, который непосредственно манипулирует указателями на внутренние узлы реализации, но нет способа сделать это, используя функции-члены std :: forward_list. В зависимости от того, как реализован std :: forward_list, вам, возможно, придется сделать копию, а затем отредактировать эту копию, чтобы получить доступ к указателям внутренних узлов. – rcgldr
@ rcgldr thx. Мой вопрос непонятен, но я имею в виду создать цикл через предоставленный интерфейс для std :: forward_list. – kmiklas
Поскольку у вас нет доступа к типу базового узла, и итератор - это просто переадресатор (что-то вроде), я не вижу, как это будет возможно. – Kevin