1.功能:求两个集合的差集
2.函数原型
- set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
- 两个集合必须是有序集合
- beg1,end1,beg2,end2 容器1开始、结束迭代器;容器2开始、结束迭代器
- dest 目标容器开始迭代器
3.举例:
- v1容器: 0 1 2 3 4 5 6 7 8 9 v2容器:5 6 7 8 9 10 11 12 13 14
- v1和v2的差集: 0 1 2 3 4
- v2和v1的差集: 10 11 12 13 14
#include<iostream> #include<vector> #include<algorithm> using namespace std; void myprint(int val) { cout << val << " "; } void test1() { vector<int> v1; vector<int> v2; for (int i = 0; i < 10; i++) { v1.push_back(i); v2.push_back(i + 5); } //创建目标容器 vector<int> vtarget; //给目标容器分配空间 //最特殊的情况,两个容器没有交集,取容器中大的size作为目标容器开辟空间 vtarget.resize(max(v1.size(), v2.size())); cout << "v1和v2的差集为:" << endl; vector<int>::iterator itEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vtarget.begin()); for_each(vtarget.begin(), itEnd, myprint); // 0 1 2 3 4 cout << endl; for_each(vtarget.begin(), vtarget.end(), myprint); //0 1 2 3 4 0 0 0 0 0 cout << "v2和v1的差集为:" << endl; itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vtarget.begin()); for_each(vtarget.begin(), itEnd, myprint); // 10 11 12 13 14 cout << endl; for_each(vtarget.begin(), vtarget.end(), myprint); // 10 11 12 13 14 0 0 0 0 0 } int main() { test1(); return 0; }