我的假設是,在std::list<>
中,列表本身的swap
函數是通過交換錨節點完成的。該節點可以訪問前一個節點並輕鬆更新前一個節點的下一個指針,以指向另一個列表的錨點;但是這不能在std::forward_list
中完成(當然,這可能非常昂貴)。std :: forward_list在C++中的swap()實現11
如果我的假設是正確的,swap()
如何以有效的方式在std::forward_list
中實現?而我們在這個時候,swap()
如何實現的std::forward_list
?
我的印象是'std :: list'在內部是一個循環列表,我假設'std :: forward_list'是一樣的。我猜測這完全取決於實施。 – Samaursa
即使它們是循環鏈表,仍然不需要更新節點上的任何指針。整個列表正在交換,因此沒有任何節點鏈接會改變。所有這些變化都是從std :: list到節點的指針。 – bames53
@ bames53:如果它是一個循環列表,那麼每個節點都指向下一個節點或列表的尾部。而列表尾部指向頭部,而頭部又指向第一個元素。那麼如何交換尾指針,因爲您需要調整指向尾部的節點,並且除非遍歷整個列表,否則無法到達尾指針。或者尾指針是指向頭部以及最後一個節點的對象? – Samaursa