这个小问题没怎么考虑效率,用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);
}