集合的交:
#include<iostream>
#include<list>
#include<vector>
using namespace std;
template<typename Object>
list<Object> intersection(const list<Object> &L1,const list<Object> &L2)
{
list<Object> intersect;
typename list<Object>::const_iterator iterL1 = L1.begin();
typename list<Object>::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++;
}
return intersect;
}
int main()
{
int n,num,m,num1;
list<int> b;
list<int> c;
list<int> result;
cout<<"<First> please enter n numbers :"<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>num;
b.push_back(num);
}
cout<<"<Second> please enter m numbers :"<<endl;
cin>>m;
for(int i=0;i<m;i++)
{
cin>>num1;
c.push_back(num1);
}
result = intersection(b,c);
list<int>::iterator Iter;
Iter = result.begin();
cout<<"After intersect List is:"<<endl;
while(Iter != result.end())
{
cout<<*Iter++<<" ";
}
cout<<endl;
return 0;
}
集合的并:
#include<iostream>
#include<list>
#include<vector>
using namespace std;
template<typename Object>
list<Object> ListUnion(const list<Object> &L1,const list<Object> &L2)
{
list<Object> intersect;
typename list<Object>::const_iterator iterL1 = L1.begin();
typename list<Object>::const_iterator iterL2 = L2.begin();
while(iterL1 != L1.end() && iterL2 != L2.end())
{
if(*iterL1 < *iterL2)
{
intersect.push_back(*iterL1);
iterL1++;
}
else if(*iterL2 < *iterL1)
{
intersect.push_back(*iterL2);
iterL2++;
}
else if(*iterL1 == *iterL2)
{
intersect.push_back(*iterL1);
iterL1++;
iterL2++;
}
}
while(iterL1 != L1.end())
{
intersect.push_back(*iterL1);
iterL1++;
}
while(iterL2 != L2.end())
{
intersect.push_back(*iterL2);
iterL2++;
}
return intersect;
}
int main()
{
int n,num,m,num1;
list<int> b;
list<int> c;
list<int> result;
b.clear();
c.clear();
result.clear();
cout<<"<First> please enter n numbers :"<<endl;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>num;
b.push_back(num);
}
cout<<"<Second> please enter m numbers :"<<endl;
cin>>m;
for(int i=0; i<m; i++)
{
cin>>num1;
c.push_back(num1);
}
result = ListUnion(b,c);
list<int>::iterator Iter;
Iter = result.begin();
cout<<"After Union List is:"<<endl;
while(Iter != result.end())
{
cout<<*Iter++<<" ";
}
cout<<endl;
return 0;
}