내 가정은 std::list<>
에있는 목록 자체에 대한 swap
함수는 앵커 노드를 교체하여 수행된다는 것입니다. 노드는 이전 노드에 액세스하고 이전 노드의 다음 포인터를 다른 목록의 앵커를 가리 키도록 쉽게 업데이트 할 수 있습니다. 그러나 이것은 std::forward_list
에서 할 수 없습니다 (글쎄, 그럴 수 있습니다, 그것은 매우 값 비쌉니다).C++에서 std :: forward_list swap() 구현
내 가정이 맞는 경우 swap()
은 효율적인 방식으로 std::forward_list
에 어떻게 구현됩니까? 그리고 우리가 그것에 도달하는 동안 은 iterator
에 대해 어떻게 구현 되었습니까? std::forward_list
? std::forward_list
'std :: list'는 내부적으로 순환리스트 였고'std :: forward_list'에 대해서도 같은 것으로 가정했습니다. 그게 완전히 구현에 의존하는 것 같아요. – Samaursa
원형 링크 된 목록이라하더라도 노드 자체에서 포인터를 업데이트 할 필요가 없습니다. 전체 목록이 교체되어 노드 링크가 변경되지 않습니다. 모든 변화는'std :: list'에서 노드까지의 포인터입니다. – bames53
@ bames53 : 원형 목록 인 경우 각 노드는 다음 노드 또는 목록의 꼬리를 가리키고 있습니다. 그리고 목록의 꼬리는 첫 번째 요소를 가리키는 머리를 가리키고 있습니다. 그렇다면 꼬리 포인터를 교체하는 방법은 꼬리를 가리키는 노드를 조정해야하고 전체 목록을 탐색하지 않으면 도달 할 수 없기 때문입니다. 또는 테일 포인터는 마지막 노드뿐만 아니라 머리를 가리키는 객체입니까? – Samaursa