动态数组vector
需要注意:
1:求并集和交集前,需要将两个数组先进行排序(int 或者 vector都需要),否则结果有误。
2:需要定义vector的size,否则可能无法得到结果
并集 set_union( ):
int main()
{
int a[4]={1,2,3,4}; //已经有序,若无序,需要排序!
int b[4]={2,3,4,5};
vector<int> c(8); //需要定义大小
set_union(a,a+4,b,b+4,c.begin()); //并集
for(auto x:c){
cout<<x<<" ";
}
return 0;
}
运行结果:
交集 set_intersection( ):
int main()
{
int a[4]={1,2,3,4}; //已经有序,若无序,需要排序!
int b[4]={2,3,4,5};
vector<int> c(8); //需要定义大小
set_intersection(a,a+4,b,b+4,c.begin()); //交集
for(auto x:c){
cout<<x<<" ";
}
return 0;
}
运行结果:
如果不想要后面的0出现,以求交集为例:
int main()
{
int a[4]={1,2,3,4}; //已经有序,若无序,需要排序!
int b[4]={2,3,4,5};
vector<int> c(8);
vector<int>::iterator it=set_intersection(a,a+4,b,b+4,c.begin()); //交集 返回位置到it
cout<<it-c.begin()<<endl; //交集中元素个数
for(int i=0;i<it-c.begin();i++) //输出这些元素
cout<<c[i]<<" ";
return 0;
}
运行结果:
集合set
集合 与 vector 不同之处在于:
1:不用排序,因为 set 本身有序且无重复
2:set_union 和 set_intersection 的第五个参数为 inserter(c,c.begin() )
并集 set_union( ):
int main()
{
set<int> a,b,c;
for(int i=1;i<5;i++) //a: 1 2 3 4
a.insert(i);
for(int i=2;i<6;i++) //b: 2 3 4 5
b.insert(i);
set_union(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin())); //并集
for(auto x:c){
cout<<x<<" ";
}
return 0;
}
运行结果:
交集 set_intersection( ):
int main()
{
set<int> a,b,c;
for(int i=1;i<5;i++) //a: 1 2 3 4
a.insert(i);
for(int i=2;i<6;i++) //b: 2 3 4 5
b.insert(i);
set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin())); //交集
for(auto x:c){
cout<<x<<" ";
}
return 0;
}
运行结果: