计算两个有序表交集并集

计算两个有序表交集并集

感觉还有一些问题,只记录一下源代码,后续还会改动

#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);
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值