函数功能
list::splice(): 将元素从一个list移动到另一list的指定位置。
理解关键点
- 移动,移动后元素将不在原来的list。
- 只是移动,不包含任何构造析构等动作。
- 这两个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