容器链表中splice()、merge()、insert()方法的区别

容器链表的insert()方法和splice()方法的区别

 

如:

#include <iostream>
#include <list>

using namespace std;
void main()
{
	list<int> A;
	list<int> B;
	list<int>::iterator ititer;
	A.push_back(2);
	A.push_back(3);
	A.push_back(4);
    
	int num[5]={1,2,3,4,5};
	B.insert(B.begin(),num,num+5);

   cout<<"A:";
	for(ititer=A.begin();ititer!=A.end();++ititer)
	{
		cout<<*ititer;
		
		
	}
	cout<<endl;

	cout<<"B:";
	for(ititer=B.begin();ititer!=B.end();++ititer)
	{
		cout<<*ititer;
		
		
	}
	cout<<endl;
	B.splice(B.end(),A);

	cout<<"the new A:";
		for(ititer=A.begin();ititer!=A.end();++ititer)
	{
		cout<<*ititer;
		
		
	}
	cout<<endl;

	cout<<"the new B:";
	for(ititer=B.begin();ititer!=B.end();++ititer)
	{
		cout<<*ititer;
		
		
	}
	cout<<endl;



}

result:

A:234
B:12345
the new A:
the new B:12345234
Press any key to continue

区别:insert将list对象的副本插入到目标区域中,而splice是将该对象直接移到目标地址。通俗地说前者是复制,粘贴。后者是剪切,粘贴。用splice时当B与A合并后,B就为空。但是要记住:迭代器仍然指向原来的位置,即使原来的元素不存在了。

 

下面是merge()合并两个链表的方法,先写结果

A:234
B:16345
A:
B:12346345
Press any key to continue

它的意思是将A合并到B的时候先在B中一个一个检查如果查到比A小的数,就不变,查到比A的数就将B的这些数插入进去.所以这种合并方法与splice()差别就在排序上面

#include <iostream>
#include <list>

using namespace std;
void main()
{
	list<int> A;
	list<int> B;
	list<int>::iterator ititer;
	A.push_back(2);
	A.push_back(4);
	A.push_back(3);
    
	int num[5]={1,6,3,4,5};
	B.insert(B.begin(),num,num+5);

   cout<<"A:";
	for(ititer=A.begin();ititer!=A.end();++ititer)
	{
		cout<<*ititer;
		
		
	}
	cout<<endl;

	cout<<"B:";
	for(ititer=B.begin();ititer!=B.end();++ititer)
	{
		cout<<*ititer;
		
		
	}
	cout<<endl;


	B.merge(A);//合并时按照顺序,但又不是将A和B一起进行排序

 cout<<"A:";
	for(ititer=A.begin();ititer!=A.end();++ititer)
	{
		cout<<*ititer;
		
		
	}
	cout<<endl;

	cout<<"B:";
	for(ititer=B.begin();ititer!=B.end();++ititer)
	{
		cout<<*ititer;
		
		
	}
	cout<<endl;
	


}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值