C++ list容器的splice方法

C++ list容器的splice方法list容器底层实现是一个带头结点的双向链表,由于链表的每个节点是单独开辟的,所以链表在移动数据,或者两个链表之间移动数据的时候,直接把节点摘下来,接入到新的位置就可以了,效率比较高。splice方法就是将list的元素进行拼接,原理就是改变结点指针的指向,效率比较高。先看看这splice方法的三种声明:(1)voidsplice(iteratorposition,list&lt…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

list容器底层实现是一个带头结点的双向链表,由于链表的每个节点是单独开辟的,所以链表在移动数据,或者两个链表之间移动数据的时候,直接把节点摘下来,接入到新的位置就可以了,效率比较高。
splice方法就是将list的元素进行拼接,原理就是改变结点指针的指向,效率比较高。


先看看这splice方法的三种声明:
(1)void splice ( iterator position, list<T,Allocator>& x );
功能: 将 list x 中的元素全都移到position处
(2)void splice ( iterator position, list<T,Allocator>& x, iterator it );
功能: 将 list x 中的由迭代器it指向的元素移到position处
(3)void splice ( iterator position, list<T,Allocator>& x, iterator first, iterator last );
功能:将 list x 中的从迭代器 first 到迭代器 last 这一段元素移动到position处

注意:position位置的指定只能是调用者容器中的位置,要剪切的元素是list x中元素


下面是测试代码:

#include<iostream>
using namespace std;
#include<algorithm>
#include<list>

int main()
{
	list<int> list1;
	list<int> list2;
	list<int> list3;

	for(int i = 0; i < 10; ++i)
	{
		list1.push_back(i);
	}

	for(int i = 0; i < 20; ++i)
	{
		list2.push_back(i);
	}

	cout << "this is list1 :  "<< endl;
	for_each( list1.begin(), list1.end(), [](int val){cout << val << " ";} );
	cout << endl;

	cout << "this is list2 :  "<< endl;
	for_each( list2.begin(), list2.end(), [](int val){cout << val << " ";} );
	cout<< endl << endl;

	//将 list1中的首元素移到 list1的最后
	list1.splice ( list1.end(), list1, list1.begin() );

	cout << "list1.splice ( list1.end(), list1, list1.begin() );  //将 list1中的首元素移到 list1的最后 " << endl;
	cout << "this is list1 :  "<< endl;
	for_each( list1.begin(), list1.end(), [](int val){cout << val << " ";} );
	cout << endl << endl;

	//将 list2 中的首元素移动到 list2 的最后
	list2.splice ( list2.end(), list2, list2.begin() );

	cout << "list2.splice ( list2.end(), list2, list2.begin() );  //将 list2 中的首元素移动到 list2 的最后" << endl; 
	cout << "this is list2 :  "<< endl;
	for_each( list2.begin(), list2.end(), [](int val){cout << val << " ";} );
	cout<< endl << endl;

	//将list2的所有元素移到list开始的位置
	list1.splice( list1.begin(), list2 );

	cout << "list1.splice( list1.begin(), list2 );  //将list2的所有元素移到list1开始的位置" << endl;	
	cout << "this is list1 :  "<< endl;
	for_each( list1.begin(), list1.end(), [](int val){cout << val << " ";} );
	cout << endl;

	cout << "this is list2 :  "<< endl;
	for_each( list2.begin(), list2.end(), [](int val){cout << val << " ";} );
	cout<< endl << endl;

	//将list从开始的位置移动到list开始的位置
	list2.splice(list2.begin(), list1, list1.begin(), list1.end());

	cout << "list2.splice(list2.begin(), list1, list1.begin(), list1.end());  //将list1从开始的位置到结束位置移动到list2开始的位置" << endl;
	cout << "this is list1 :  "<< endl;
	for_each( list1.begin(), list1.end(), [](int val){cout << val << " ";} );
	cout<< endl;

	cout << "this is list2 :  "<< endl;
	for_each( list2.begin(), list2.end(), [](int val){cout << val << " ";} );
	cout << endl << endl;


	return 0;
}

运行结果:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189962.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数学图形(1.5)克莱线

    数学图形(1.5)克莱线克莱线(Cayley’sSextic)是极坐标方程为:y=4a(cosΘ/3)^3的六次曲线,其中a是一个实数。相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件免费开源.QQ交流群:367752815克莱线看上去与心形线类似.呵呵,我想说的是,它更像个多了屁眼的屁股。vertices=1000r=10.0t=from(…

    2025年11月5日
    4
  • 视频目标检测识别

    视频目标检测识别之前文章目标检测API已经介绍过API的基本使用,这里就不赘述了,直接上本次内容的代码了,添加的内容并不多。将测试的test.mp4原文件放到models-master\research\object_detection路径下,并创建一个detect_video.py文件,代码内容如下:importosimportcv2importtimeimportargparseim…

    2022年6月11日
    31
  • mask rcnn详解_3R制造

    mask rcnn详解_3R制造一.Mask-RCNN介绍    上篇文章介绍了FCN,这篇文章引入个新的概念Mask-RCNN,看着比较好理解哈,就是在RCNN的基础上添加Mask。    Mask-RCNN来自于年轻有为的Kaiming大神,通过在Faster-RCNN的基础上添加一个分支网络,在实现目标检测的同时,把目标像素分割出来。    论文下载:MaskR-CN

    2022年9月26日
    3
  • XPS文件转换PDF小工具,集成了界面,方便大家使用

    XPS文件转换PDF小工具,集成了界面,方便大家使用网上有关于XPS转换PDF的工具gxps.exe,由GhostPDL的代码编译而成。但是很不方便使用,需要设置参数,不够直观。所以想出了给它集成一个外壳的想法。 利用C++语言,编写了外壳,调用gxps.exe,可以直接选择需要转换的文件和保存的地址。 完成界面后,感觉大家还需要再下gxps.exe,两个exe看起来很不爽。所以就将exe集成到了外壳程序里。需要转换时释放该文件

    2022年5月25日
    54
  • vue怎么使用layui_layui动态添加输入框

    vue怎么使用layui_layui动态添加输入框vue-layer弹框插件安装npmi–savevue-layer引用importlayerfrom’vue-layer’Vue.prototype.$layer=layer(Vue);参数说明{type:0,//0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)title:’信息’,con…

    2025年8月1日
    4
  • django vue部署_如何远程连接

    django vue部署_如何远程连接Django+Vue实现WebSocket连接

    2022年4月22日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号