set_intersection //求两个容器的交集
set_union //求两个容器的并集
set_difference //求两个容器的差集
(1)set _intersection
求交集,求交集的两个集合必须有序,目标容器开辟空间需要从两个容器中去最小值,set_intersection返回值即是交集中最后一个元素的位置
函数原型:
set_intersection(iterator beg1,iterator end1,iterator beg2,iteraotr end2,iterator dest);
示例:
void myPrint(int val){
cout<<val<<" ";
}
void test01(){
vector<int>v1;
vector<int>v2;
for(int i=0;i<10;i++){
v1.push_back(i); //0-9
v2.push_back(i+5) ; //5-14
}
vector<int>vTarget;
//目标容器提前开辟空间,最特殊情况选择最小容器大小值
vTarget.resize(min(v1.size(),v2.size()));
//获取交集,返回目标容器迭代器的最后一个位置
vector<int>::iterator itEnd = set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),vTarget.begin());
//输出交集容器的值
for_each(vTarget.begin(),itEnd,myPrint);
cout<<endl;
}
输出样式:
(2)set_union
求并集,两个容器集合必须是有序集合。最特殊情况下开辟内存空间为两个容器集合相加,返回的也是最后一个元素位置的迭代器
函数原型:
set_union(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
示例:
vector<int>vTarget;
//目标容器提前开辟空间,最特殊情况选择最小容器大小值
vTarget.resize(max(v1.size(),v2.size()));
//获取交集,返回目标容器迭代器的最后一个位置
vector<int>::iterator itEnd = set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),vTarget.begin());
输出样式:
(3)set_difference
求差集
函数原型:
set_difference(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
//俩个集合必须有序,
示例:
void test01(){
vector<int>v1;
vector<int>v2;
for(int i=0;i<10;i++){
v1.push_back(i); //0-9
v2.push_back(i+5) ; //5-14
}
vector<int>vTarget;
//目标容器提前开辟空间,最特殊情况选择两个容器的容器中的最大值
vTarget.resize(max(v1.size(),v2.size()));
cout<<"v1和v2的差集为: ";
//获取交集,返回目标容器迭代器的最后一个位置
vector<int>::iterator itEnd = set_difference(v1.begin(),
v1.end(),v2.begin(),v2.end(),vTarget.begin());
//输出交集容器的值
for_each(vTarget.begin(),itEnd,myPrint);
cout<<endl;
cout<<"v2和v1的差集为:";
//获取交集,返回目标容器迭代器的最后一个位置
itEnd = set_difference(v2.begin(),
v2.end(),v1.begin(),v1.end(),vTarget.begin());
//输出交集容器的值
for_each(vTarget.begin(),itEnd,myPrint);
cout<<endl;
}
输出样式: