C++ list::splice()函数

一、定义

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

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
splice函数是C++标准库中list容器的成员函数之一。它用于将一个list容器中的元素剪切或移动到另一个list容器的指定位置。具体而言,splice函数有三种声明方式: 1. `void list::splice(iterator pos, list rhs)`:此声明将rhs中的所有元素移动到当前list容器的pos位置之前。 2. `void list::splice(iterator pos, list rhs, iterator ix)`:此声明将rhs中的ix元素移动到当前list容器的pos位置之前。 3. `void list::splice(iterator pos, list rhs, iterator first, iterator last)`:此声明将rhs中从first到last(不包括last)的元素移动到当前list容器的pos位置之前。 根据提供的引用内容和,我可以给出两个具体的例子来说明splice函数的使用: 例子1: ```cpp #include <iostream> #include <list> using namespace std; int main() { list<int> li1{ 1, 2, 3, 4 }; list<int> li2{ 11, 12, 13, 14 }; list<int>::iterator it = li1.begin(); it++; // 指向元素2 li2.splice(li2.begin(), li1, it); // 将元素2插入到li2的第一个位置上 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; } ``` 输出: ``` li1 is 1 3 4 li2 is 2 11 12 13 14 ``` 在这个例子中,我们通过使用`li2.splice(li2.begin(), li1, it)`将li1中的元素2剪切并插入到li2的第一个位置。最终,li1中的元素2被删除,li2中的元素变为2 11 12 13 14。 例子2: ```cpp #include <iostream> #include <list> using namespace std; int main() { list<int> li1{ 1, 2, 3, 4 }; list<int> li2{ 11, 12, 13, 14 }; auto it = li1.begin(); advance(it, 2); // 指向元素3 li1.splice(li1.begin(), li1, it, li1.end()); // 将3和4插入到li1的第一个位置之前 li2.splice(li2.begin(), li1, li1.begin(), li1.end()); // 将li1中的所有元素插入到li2的第一个位置之前 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; } ``` 输出: ``` li1 is 1 2 li2 is 3 4 11 12 13 14 ``` 在这个例子中,我们首先使用`advance(it, 2)`将迭代器it向后移动两个位置,指向li1的第三个元素3。然后,我们使用`li1.splice(li1.begin(), li1, it, li1.end())`将li1中的元素3和4插入到li1的第一个位置之前,使得li1的元素变为1 2。接着,我们使用`li2.splice(li2.begin(), li1, li1.begin(), li1.end())`将li1中的所有元素插入到li2的第一个位置之前,使得li2的元素变为3 4 11 12 13 14。 综上所述,splice函数可以方便地在list容器中移动元素,并且支持不同的参数组合以满足不同的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值