一、定义
list::splice实现list拼接的功能。将源list的内容部分或全部元素删除,拼插入到目的list。
函数有以下三种声明:
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 移到另一个中去 它有三种形式
1、从positon开始,把一个 list 的全部元素搬移到另一个中去
2、从positon开始,把一个 list 中包含的一组元素搬移到另一个中去
3、从positon开始,把first 到 last 剪接到要操作的list对象中
二、实例
1、使用第一种声明,将list2的元素全部剪切到list1的第一个元素后面,然后list2中没有元素
int main()
{
list<int>li1{ 1,2,3,4 };
list<int>li2{ 11,12,13,14 };
list<int>::iterator it = li1.begin();
it++; // 插入到第一个元素后面
li1.splice(it, li2);
if (li2.empty()) {
cout << "li2 is empty" << endl;
}
else
{
cout << "li2 is not empty" << endl;
}
cout << "li1 is" << endl;
for (list<int>::iterator item = li1.begin(); item != li1.end(); ++item) {
cout << *item << " ";
}
return 0;
}
运行结果
?2、使用第二种声明, 把list1中包含的一个元素剪切到list2中去
int main()
{
list<int>li1{ 1,2,3,4 };
list<int>li2{ 11,12,13,14 };
list<int>::iterator it = li1.begin();
it++;
li2.splice(li2.begin(), li1, it); // 把元素2插入到list2的第一个元素的位置上
cout << "li1 is" << endl;
for (list<int>::iterator item = li1.begin(); item != li1.end(); ++item) {
cout << *item << " ";
}
cout << endl;
cout << "li2 is" << endl;
for (list<int>::iterator item = li2.begin(); item != li2.end(); ++item) {
cout << *item << " ";
}
return 0;
}
运行结果
?3、使用第三种声明, 把list1中包含的一组元素剪切到list2中去
int main()
{
list<int>li1{ 1,2,3,4 };
list<int>li2{ 11,12,13,14 };
auto it = li1.begin();
advance(it, 2);//advance 的意思是增加的意思,就是相当于 it=it+2;这里指向3
li1.splice(li1.begin(), li1, it, li1.end()); // 将3,4插入到1,2前面
cout << "li1 is" << endl;
for (list<int>::iterator item = li1.begin(); item != li1.end(); ++item) {
cout << *item << " ";
}
li2.splice(li2.begin(), li1, li1.begin(), li1.end()); // 将list1插入到list2前面
cout << endl;
cout << "li2 is" << endl;
for (list<int>::iterator item = li2.begin(); item != li2.end(); ++item) {
cout << *item << " ";
}
return 0;
}
运行结果
?参考:
C++ list::splice()函数详解_【黑键】-CSDN博客_c++ splice
C++ list::splice()用法_陈显森的博客-CSDN博客_c++ list splice
|