这个小问题没怎么考虑效率,用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);
}
本文介绍了一种使用C++标准库中的list来实现两个整数列表的交集和并集的方法。通过具体代码示例展示了如何利用list的特性进行元素比较,并通过sort和unique成员函数对结果进行排序和去重。
6万+

被折叠的 条评论
为什么被折叠?



