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;
}

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 解决tomcat配置环境变量失败[通俗易懂]

    解决tomcat配置环境变量失败[通俗易懂]不能没有JAVA_HOME环境变量,不然即使java变量配置成功start.bat也不能找到jdk 

  • Java开发已经烂大街,没前途了?假的

    Java开发已经烂大街,没前途了?假的经过了多年的发展,Java早已由一门单纯的计算机编程语言,演变为了一套强大的技术体系。在程序员中,Java开发工程师就占据20%的比例,不可否认,Java语言有着广泛的行业发展前景,它在行业中的影响力已是不可避免的。所以许多人想通过学习Java转行、找好工作,所以报班学习Java开发的人越来越多。很多人说Java开发已经烂大街了,现在学Java没前途。真的是这样的吗?现在学Java还有前途吗?本文,给大家详细解答一下。1、Java人才缺口大根据职友集数据显示,Java开发的全国招聘量123805条。从

  • Shell:export命令

    Shell:export命令https://www.cnblogs.com/tinywan/p/7224011.html一、Windows环境变量  1、在Windows系统下,很多软件安装都需要配置环境变量,比如安装jdk,如果不配置环境变量,在非软件安装的目录下运行javac命令,将会报告找不到文件,类似的错误。  2、那么什么是环境变量?简单说,就是指定一个目录,运行软件的时候,相关的程序将会按照该目录寻找相关文件。设置变量对于一般人最实用的功能就是:不用拷贝某些dll文件到系统目录中了,而path

  • Python原始字符串无法在字符串结尾加上反斜杠的处理方式

    Python原始字符串无法在字符串结尾加上反斜杠的处理方式

  • javabean总结

    javabean总结

  • Nios II 向板上下载程序时错误解决

    Nios II 向板上下载程序时错误解决

发表回复

您的电子邮箱地址不会被公开。

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