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 的元素之前的位置


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部