计算两个有序表交集并集
感觉还有一些问题,只记录一下源代码,后续还会改动
#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> intersectionList( const list<T> & L1,
const list<T> & L2)
{
list<T> intersect;
typename list<T>:: const_iterator iterL1 = L1.begin();
typename list<T>:: const_iterator iterL2= L2.begin();
while(iterL1 != L1.end() && iterL2 != L2.end())
{
if (*iterL1 == *iterL2)
{
intersect.push_back(*iterL1);
iterL1++;
iterL2++;
}
else if (*iterL1 < *iterL2)
iterL1++;
else
iterL2++;
}
intersect.sort();
intersect.unique();
return intersect;
}
// 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;
// }
template <typename T>
list<T> unionList( const list<T> & L1,
const list<T> & L2)
{
list<T> result;
typename list<T>:: const_iterator iterL1 = L1.begin();
typename list<T>:: const_iterator iterL2= L2.begin();
while(iterL1 != L1.end() && iterL2 != L2.end())
{
if (*iterL1 == *iterL2)
{
result.push_back(*iterL1);
iterL1++;
iterL2++;
}
else if (*iterL1 < *iterL2)
{
result.push_back(*iterL1);
iterL1++;
}
else
{
result.push_back(*iterL2);
iterL2++;
}
}
return result;
}
int main()
{
list<int> lbt= { 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);
}