数据结构与算法分析 c++11 练习3.4 3.5 给定两个已排序的表L1和L2,求交集和并集

本文介绍了一种使用C++标准库中的list来实现两个整数列表的交集和并集的方法。通过具体代码示例展示了如何利用list的特性进行元素比较,并通过sort和unique成员函数对结果进行排序和去重。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


这个小问题没怎么考虑效率,用List标准库的函数实现下吧。


#include <iostream>
#include <list> 

using namespace std; 

void printList(list<int> t)
{
	auto itr = t.begin();
	while (itr!=t.end())
	{ 		
	 cout << *itr++<<" ";
    }
	cout << endl;

} 

template <typename T>
list<T> intersectionList(list<T> &lhs, list<T> &rhs)
{
	list<T> itrsectLst;
	auto l1 = lhs.begin();
	for (; l1 != lhs.end(); l1++)
	{
		auto r2 = rhs.begin();
		if (*l1 < *r2 || *l1 > *(--rhs.end()))
			continue;
		else {
			for (; r2 != rhs.end(); r2++)
			{
				if (*l1 == *r2)
					itrsectLst.push_back(*l1);
			}
		}
	}
	itrsectLst.sort();
	itrsectLst.unique();
	return itrsectLst;
}

template <typename T>
list<T> unionList(list<T> &lhs, list<T> &rhs)
{

	list<T> unionLst=lhs,temLst=rhs;
	unionLst.sort();
	temLst.sort();
	unionLst.merge(temLst);
	unionLst.unique();
	return unionLst;

}

int main(){ 


	list<int> lbt= { 15,12,0, 2, 3, 5, 6, 7, 9, 12 }, rbt={ 1, 2, 4, 5, 7, 8, 9,12, 13 };
	list<int> itslst,unionlst;
	printList(lbt);
	printList(rbt);
	
	cout << "test intersection: " << endl;
	itslst=intersectionList(lbt,rbt);
	printList(itslst);

	cout << "test union: " << endl;
	unionlst = unionList(lbt, rbt);
	printList(unionlst);

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值