当前位置: 代码迷 >> 综合 >> list::splice()
  详细解决方案

list::splice()

热度:37   发布时间:2023-12-13 06:14:26.0

函数功能

list::splice(): 将元素从一个list移动到另一list的指定位置。

理解关键点

  1. 移动,移动后元素将不在原来的list。
  2. 只是移动,不包含任何构造析构等动作。
  3. 这两个list可以是同一个list。适用于调整list节点位置顺序。

函数接口

接口 功能
void splice (iterator position, list& x); 移动整个list
void splice (iterator position, list& x, iterator i); 移动单个元素
void splice (iterator position, list& x, iterator first, iterator last); 移动指定范围的元素

例子

// splicing lists
#include <iostream>
#include <list>int main ()
{
    std::list<int> mylist1, mylist2;std::list<int>::iterator it;// set some initial values:for (int i=1; i<=4; ++i)mylist1.push_back(i);      // mylist1: 1 2 3 4for (int i=1; i<=3; ++i)mylist2.push_back(i*10);   // mylist2: 10 20 30it = mylist1.begin();++it;                         // points to 2//将整个mylist2移动到mylist1的位置2 mylist1.splice (it, mylist2); // mylist1: 1 10 20 30 2 3 4// mylist2 (empty) --因为移动到mylist1,所以mylist2为空// "it" still points to 2 (the 5th element)//将mylist1第5个元素2(因为上一步操作后it指向第五个元素)移动到mylist2的开始位置 mylist2.splice (mylist2.begin(),mylist1, it);// mylist1: 1 10 20 30 3 4// mylist2: 2// "it" is now invalid.it = mylist1.begin();std::advance(it,3);           // "it" points now to 30//it指向第四个元素30//将mylist1的多个连续元素(范围从第四个到结束)移动到mylist1的开始位置 mylist1.splice ( mylist1.begin(), mylist1, it, mylist1.end());// mylist1: 30 3 4 1 10 20std::cout << "mylist1 contains:";for (it=mylist1.begin(); it!=mylist1.end(); ++it)std::cout << ' ' << *it;std::cout << '\n';std::cout << "mylist2 contains:";for (it=mylist2.begin(); it!=mylist2.end(); ++it)std::cout << ' ' << *it;std::cout << '\n';return 0;
}

输出

mylist1 contains: 30 3 4 1 10 20
mylist2 contains: 2
  相关解决方案