C++ list::splice()用法

因爲 list 容器不支持隨機訪問 所以 merge() remove() reverse() sort()和 unique()泛型算法最好不要用在 list 對象上 儘管這些算法都沒有顯式地要求一個 RandomAccessIterator標準庫爲每個算法都提供了專門的 list 成員實例 比如專門爲 list 的 splice()操作):

  • list::merge() 用第二個有序的 list 合併一個有序 list
  • list::remove() 刪除等於某個值的元素
  • list::remove_if() 刪除滿足某個條件的元素
  • list::reverse() 將 list 中元素反向排列
  • list::sort() 排序 list 的元素
  • list::splice() 把一個 list 的元素移到另一個 list 中
  • list::unique() 刪除某個元素的重複連續拷貝

list::splice()

void list::splice( iterator pos, list rhs );
void list::splice( iterator pos, list rhs, iterator ix );
void list::splice( iterator pos, list rhs,iterator first, iterator last );

splice()把一個或一級元素從一個 list 移到另一箇中去 它有三種形式 把一個 list 的全部元素搬移到另一箇中去 把一個 list 中包含的一組元素搬移到另一箇中去 以及把一個 list中的單個元素搬移到另一箇中去 每種形式都給出了一個指出插入一個或一組元素的位置的iterator 例如 給出下列兩個 list:

int array[ 10 ] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 };
list< int > ilist1( array, array + 10 );
list< int > ilist2( array, array+2 ); // 包含 0, 1

下面使用 splice()把 ilist1 的第一個元素移到 ilist2 中 現在 ilist2 包含元素 0 1 0 而ilist1 不再包含 0:

// ilist2.end() 指示要接合元素的位置
// 被接合的元素在該位置之前
// ilist1 指示從哪個 list 中移動元素
// ilist1.begin() 指示要被移動的元素
ilist2.splice( ilist2.end(), ilist1, ilist1.begin() )

在 splice()的下一個用法中 傳遞了兩個 iterator 指示要移動元素的子範圍:

list< int >::iterator first, last; 
first = ilist1.find( 2 );
last = ilist1.find( 13 );
ilist2.splice( ilist2.begin(), ilist1, first, last );

在這種情況下 元素 2 3 5 和 8 被從 ilist1 移到 ilist2 的前部 現在 ilist1 含有五個元素 1 1 13 21 和 34 爲了把剩下這些元素移到 ilist2 中 可以使用 splice()操符的最後一種形式

list< int >::iterator pos = ilist2.find( 5 );
ilist2.splice( pos, ilist1 );

現在 ilist1 是空的 剩下的五個元素被移到 ilist2 中 放在值爲 5 的元素之前的位置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章