플로이드의 Tortoise and Hare algorithm을 연구 중이며 std :: forward_list를 사용하여 문제를 모델링하려고합니다. 특히, std::forward_list
을 사용하여 의도적으로주기를 만들고 싶다고 말하면서 고의로 그것을 감지하고 싶습니다.사이클이 std :: forward_list에 존재할 수 있습니까?
(인터페이스를 해킹하지 않고, 아래의 코멘트를 당;. 즉,주기를 만들기 위해 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
기본 노드 유형에 대한 액세스 권한이없고 반복자가 ForwardIterator 일 뿐이므로이 방법이 가능하지 않습니다. – Kevin