常用集合算法
- set_intersection
- set_union
- set_difference
1、
set_intersection
求两个容器的交集
2、
set_union
求两个容器的并集
3、
set_difference
求两个容器的差集
set_intersection
求两个容器的交集
set_intersection(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
两个集合必须是有序序列,beg1容器1开始迭代器,end1容器1结束迭代器,beg2容器2开始迭代器,end2容器2结束迭代器,dest目标容器开始迭代器
void test() {vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(34);v.push_back(35);for_each(v.begin(), v.end(), p3);cout << endl;vector<int> v1;v1.push_back(10);v1.push_back(20);v1.push_back(34);v1.push_back(56);v1.push_back(67);for_each(v1.begin(), v1.end(), p3);cout << endl;vector<int>v2; // 目标容器//特殊情况下,大容器包含小容器,开辟空间 取小容器的大小就可以v2.resize(min(v.size(), v1.size()));// 求集合交集到目标容器,返回的是最后一个交集的迭代器vector<int>::iterator EndIt = set_intersection(v.begin(), v.end(), v1.begin(), v1.end(), v2.begin());//如果第二个参数是v.end()是遍历整个数组,会出现空间不足的情况,所有用获取的位置for_each(v2.begin(), EndIt, p3);
}
目标容器开辟空间在两个容器中取小的容器空间就可以,set_intersection返回值即是交集中最后一个元素的位置。
set_union
求两个容器的并集
set_union(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
两个集合必须是有序序列,beg1容器1开始迭代器,end1容器1结束迭代器,beg2容器2开始迭代器,end2容器2结束迭代器,dest目标容器开始迭代器
void test() {...v2.resize(v.size()+v1.size());// 求集合交集到目标容器,返回的是最后一个交集的迭代器vector<int>::iterator EndIt = set_union(v.begin(), v.end(), v1.begin(), v1.end(), v2.begin());...
}
目标容器开辟空间需要两个容器空间相加,set_union返回值即是交集中最后一个元素的位置。
set_difference
两个集合的差集
set_difference(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
两个集合必须是有序序列,beg1容器1开始迭代器,end1容器1结束迭代器,beg2容器2开始迭代器,end2容器2结束迭代器,dest目标容器开始迭代器
void test() {...vector<int>v2; // 目标容器//最特殊的情况,两个容器没有交集,取大的容器空间v2.resize(max(v.size(),v1.size()));// 求集合交集到目标容器,返回的是最后一个交集的迭代器//v和v1的差集vector<int>::iterator EndIt = set_difference(v.begin(), v.end(), v1.begin(), v1.end(), v2.begin());cout << "v和v1的差集:" ;for_each(v2.begin(), EndIt, p3);cout << endl;cout << "-------------------------------------" << endl;//v1和v的差集vector<int>::iterator EndIt1 = set_difference(v1.begin(), v1.end(), v.begin(), v.end(), v2.begin());cout << "v1和v的差集:";for_each(v2.begin(), EndIt1, p3);
}
目标容器开辟空间在两个容器中取大的空间就可以,set_difference返回值即是交集中最后一个元素的位置。两个容器的顺序不同结果也不同.