HDOJ 2033 人见人爱A+B 参考代码,使用STL的set容器。
方法1:algorithm中的set_difference。
#pragma warning (disable:4786)
#include<set>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
while(true)
{
int m,n,i,t;
scanf("%d%d",&m,&n);
if(m==0 && n==0) break;
set <int> s1; // #include<set>
set <int> s2;
for(i=0;i<m;i++)
{
scanf("%d",&t);
s1.insert (t);
}
for(i=0;i<n;i++)
{
scanf("%d",&t);
s2.insert (t);
}
set <int> res;
//set_union,set_intersection,set_difference分别实现集合的并、交、差,#include<algorithm>
set_difference(s1.begin(),s1.end(),s2.begin(),s2.end(),insert_iterator<set<int> >(res, res.begin()));
if(res.size()==0 )
{
printf("NULL\n");
}
else
{
for(set <int>::iterator it=res.begin();it!=res.end() ;it++)
{
printf("%d ",*it);
}
printf("\n");
}
}
return 0;
}
方法2:algorithm中的find, set的erase
#include<set>
#include<cstdio>
#include <vector>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int m,n,i,t;
while(1)
{
scanf("%d%d",&m,&n);
if(m==0&&n==0) break;
set <int> s1;
set <int> s2;
for(i=0;i<m;i++)
{
scanf("%d",&t);
s1.insert (t);
}
for(i=0;i<n;i++)
{
scanf("%d",&t);
s2.insert (t);
}
for(set <int>::iterator it2=s2.begin();it2!=s2.end() ;it2++) //用迭代器遍历set的方法
{
set <int>::iterator it1=find(s1.begin(),s1.end(),*it2); //algorithm的find
if (it1!=s1.end()) //找到则用erase删除
{
s1.erase (it1);
}
}
if(s1.size()==0 )
{
printf("NULL\n");
}
else
{
for(set <int>::iterator it1=s1.begin();it1!=s1.end() ;it1++)
{
printf("%d ",*it1);
}
printf("\n");
}
}
return 0;
}