拼接如何工作? 我http://www.cplusplus.com/reference/list/list/splice/在cpp中運行splice()
讀到它,我無法理解這部分,從上面的鏈接代碼:
mylist1.splice (mylist1.begin(), mylist1, it, mylist1.end());
拼接如何工作? 我http://www.cplusplus.com/reference/list/list/splice/在cpp中運行splice()
讀到它,我無法理解這部分,從上面的鏈接代碼:
mylist1.splice (mylist1.begin(), mylist1, it, mylist1.end());
想象一下,你有一個整數包含以下內容的列表:
[1, 2, 3, 4, 5]
現在您在列表中創建一個名爲it
的迭代器,並將其前進3個位置:
[1, 2, 3, 4, 5]
^
'it' points here
那麼拼接列表到自身,以列表的開始(第一個參數),在同一列表(第二個參數),從it
(第三個參數)所指出的位置,到最後(第四個參數),這使結果如下:
[4, 5, 1, 2, 3]
因此,您有效地將兩個元素的列表右移。
splice函數的第四個參數將範圍移動(不復制)到第一個參數指定的位置。
在你的榜樣你移動你的列表的元素到另一個位置在列表中(更準確地說是列表的末尾到開頭)。
您需要提供源list
的原因是,否則元件不能從它被移除。
void list<T,Allocator>::splice (iterator position, list<T,Allocator>& x, iterator i);
void list<T,Allocator>::splice (iterator position, list<T,Allocator>& x, iterator start, iterator finish);
這是相當困難的看只是看它,因爲我們有2級表和2個迭代器。
這個詞position
雖然給它。它說明在哪裏執行insert
。
這是i
迭代器是被什麼感動。在第二次過載時,範圍從start
到finish
但不是finish
本身被移動。 finish
可能是列表的結尾。
的position
必須屬於this
列表。迭代器必須屬於x
列表。元素插入源(此)列表中的position
之前,並且同時從x
列表中刪除。
注意cplusplus.com指出迭代器變得無效,一旦拼接然而,這是不實際的情況下,他們也仍然有效。
cplusplus.com是,所述position
正確可能不是剪接元件(在的情況下的列表是相同的)
在您的例子之一:
mylist1.splice (mylist1.begin(), mylist1, it, mylist1.end());
it
必須mylist1中的迭代器。它會出現它不能是mylist1.begin()
。
您的操作將從it
開始的所有元素移動到列表的開頭。
不完全重複,但看到這樣的疑問: http://stackoverflow.com/questions/4912380/move-list-element-to-the-end-in-stl/4912492#4912492 – CashCow