文章目录
今天根据 http://www.cplusplus.com/reference/list/list/splice/看了list splice方法的具体使用。
list splice作用是将两个list进行拼接,有三种使用方法。
void splice (iterator position, list& x);
void splice (iterator position, list& x, iterator i);
void splice (iterator position, list& x, iterator first, iterator last);
有兴趣的可以仔细看一下上面链接的解释。下面我通过例子解释一下用法。
void splice (iterator position, list& x);
#include <iostream>
#include <list>
using namespace std;
int main()
{
std::list<int> mylist1, mylist2;
std::list<int>::iterator iter;
std::list<int>::iterator it;
// set some initial values:
for (int i=1; i<=4; ++i)
mylist1.push_back(i); // mylist1: 1 2 3 4
for (int i=1; i<=3; ++i)
mylist2.push_back(i*10); // mylist2: 10 20 30
for (it=mylist1.begin(); it!=mylist1.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
for (it=mylist2.begin(); it!=mylist2.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
iter = mylist1.begin();
++iter;
//1.test void splice (iterator position, list& x);
mylist1.splice (iter, mylist2);
cout << "iter=" << *iter << endl;
for (it=mylist1.begin(); it!=mylist1.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
for (it=mylist2.begin(); it!=mylist2.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 1;
}
运行结果:
1 2 3 4
10 20 30
1 10 20 30 2 3 4
结果分析:
初始化:
mylist1: 1 2 3 4
mylist2: 10 20 30
splice之后:
mylist1: 1 10 20 30 2 3 4
mylist2:
iterator position:表示插入list的位置
list& x:表示被插入的list
插入之后,x list被清空。
void splice (iterator position, list& x, iterator i);
#include <iostream>
#include <list>
using namespace std;
int main()
{
std::list<int> mylist1, mylist2;
std::list<int>::iterator iter;
std::list<int>::iterator it;
// set some initial values:
for (int i=1; i<=4; ++i)
mylist1.push_back(i); // mylist1: 1 2 3 4
for (int i=1; i<=3; ++i)
mylist2.push_back(i*10); // mylist2: 10 20 30
for (it=mylist1.begin(); it!=mylist1.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
for (it=mylist2.begin(); it!=mylist2.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
iter = mylist1.begin();
++iter;
//1.test void splice (iterator position, list& x);
mylist1.splice (iter, mylist2);
for (it=mylist1.begin(); it!=mylist1.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
for (it=mylist2.begin(); it!=mylist2.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
//2.test void splice (iterator position, list& x, iterator i);
mylist2.splice (mylist2.begin(),mylist1, iter);
for (it=mylist1.begin(); it!=mylist1.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
for (it=mylist2.begin(); it!=mylist2.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 1;
}
运行结果:
1 2 3 4
10 20 30
1 10 20 30 2 3 4
1 10 20 30 3 4 : 删除了iter指针位置的值
2:将mylist1 lter 指针位置的值插入到了mylist2中
void splice (iterator position, list& x, iterator first, iterator last);
#include <iostream>
#include <list>
using namespace std;
int main()
{
std::list<int> mylist1, mylist2;
std::list<int>::iterator iter;
std::list<int>::iterator it;
// set some initial values:
for (int i=1; i<=4; ++i)
mylist1.push_back(i); // mylist1: 1 2 3 4
for (int i=1; i<=3; ++i)
mylist2.push_back(i*10); // mylist2: 10 20 30
for (it=mylist1.begin(); it!=mylist1.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
for (it=mylist2.begin(); it!=mylist2.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
iter = mylist1.begin();
++iter;
//1.test void splice (iterator position, list& x);
mylist1.splice (iter, mylist2);
for (it=mylist1.begin(); it!=mylist1.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
for (it=mylist2.begin(); it!=mylist2.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
//2.test void splice (iterator position, list& x, iterator i);
mylist2.splice (mylist2.begin(),mylist1, --iter);
std::cout << *mylist2.begin() << endl;
for (it=mylist1.begin(); it!=mylist1.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
for (it=mylist2.begin(); it!=mylist2.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
//3.test void splice (iterator position, list& x, iterator first, iterator last);
mylist2.splice ( mylist2.begin(), mylist1, mylist1.begin(), mylist1.end());
for (it=mylist1.begin(); it!=mylist1.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
for (it=mylist2.begin(); it!=mylist2.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 1;
}
运行结果:
1 2 3 4
10 20 30
1 10 20 30 2 3 4
30
1 10 20 2 3 4
30
: mylist1:被接切到mylist2,所以为空
1 10 20 2 3 4 30 :mylist2:
iterator position: 表示list插入的位置
list& x: 表示被接切的list
iterator first: 表示被接切list的起点
iterator last: 表示被接切list的终点