头文件:#include<algorithm>.
set_intersection:求交集
set_union:求并集
set_difference:求差集
set_intersection
求交集
set_intersection(begin1(), end1(), begin2(), end2(), target.begin())
注:返回值是交集的最后一个迭代器,目标容器需要提前开辟空间,最坏情况一个容器包含另一个的所有元素,则目标容器的最大大小为二者中较小容器的大小。
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 5; i++){
v1.push_back(i);
v2.push_back(i + 2);
}
vector<int> t(v1.size()>v2.size() ? v2.size() : v1.size(), 0);
auto it = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), t.begin());//返回最后一个迭代器
for_each(t.begin(), it, myPrint());
cout << endl;
执行结果:
set_union
求并集
set_union(begin1(), end1(), begin2(), end2(), target.begin())
注:返回值为并集的最后一个迭代器。目标容器需要提前开辟空间,最坏情况两个容器互不包含,则最大的空间为两个容器大小之和。
程序:
//求并集
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 5; i++){
v1.push_back(i);
v2.push_back(i + 2);
}
vector<int> t(v1.size()+v2.size(), 0);//最坏情况两个不包含对方
auto it = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), t.begin());//返回最后一个迭代器
for_each(t.begin(), it, myPrint());
cout << endl;
结果:
set_difference
求差集
参数同前两节
注:要看是谁对谁的差集
A对B的差集,A中有,B中没有的元素。
最多也就是二者较大的容器大小
程序:
//求差集
vector<int> v1 = { 1, 2, 3, 4, 5 };
vector<int> v2 = { 6, 7, 8 };
vector<int> t(v1.size()>v2.size()?v1.size():v2.size(), 0);//最坏情况两个不包含对方,差集大小为两个容器中的较大值,需要看是谁对谁的差集
auto it = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), t.begin());//返回最后一个迭代器
for_each(t.begin(), it, myPrint());
cout << endl;
vector<int> v3 = { 6, 7, 8 };
vector<int> v4 = { 1, 2, 3, 4, 5 };
vector<int> t2(v3.size()>v4.size() ? v3.size() : v4.size(), 0);//最坏情况两个不包含对方,差集大小为两个容器中的较大值,需要看是谁对谁的差集
it = set_difference(v3.begin(), v3.end(), v4.begin(), v4.end(), t2.begin());//返回最后一个迭代器
for_each(t2.begin(), it, myPrint());
cout << endl;
结果: