集合
图解:
交集
set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest)
- set_intersection算法 求两个set集合的交集
- 注意:两个集合必须是有序序列
- @param beg1 容器1开始迭代器
- @param end1 容器1结束迭代器
- @param beg2 容器2开始迭代器
- @param end2 容器2结束迭代器
- @param dest 目标容器开始迭代器
- @return 目标容器的最后一个元素的迭代器地址
void test01() { vector<int>v1; vector<int>v2; for (int i = 0; i < 10; i++) { v1.push_back(i); v2.push_back(i + 5); } vector<int> vTar; //目标容器 vTar.resize(min(v1.size(), v2.size())); //取交集中空间大小较小的 vector<int>::iterator itEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTar.begin()); //交集 返回末尾迭代器 即 最后一个交集数据 //如:5 6 7 8 9 0 0 0 0 0 交集只到9 itEnd返回的就是9的下一个位置,即 0 cout << *(itEnd-1) << endl; //9 copy(vTar.begin(), itEnd, ostream_iterator<int>(cout, " ")); }
结果:
并集
set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest)
- set_union算法 求两个set集合的并集
- 注意:两个集合必须是有序序列
- @param beg1 容器1开始迭代器
- @param end1 容器1结束迭代器
- @param beg2 容器2开始迭代器
- @param end2 容器2结束迭代器
- @param dest 目标容器开始迭代器
- @return 目标容器的最后一个元素的迭代器地址
void test02() { vector<int>v1; vector<int>v2; for (int i = 0; i < 10; i++) { v1.push_back(i); v2.push_back(i + 5); } vector<int> vTar; //目标容器 vTar.resize( v1.size() + v2.size()); //取交集中空间大小较小的 vector<int>::iterator itEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTar.begin()); //并集 返回末尾迭代器 即 最后一个并集数据 cout << *(itEnd - 1) << endl; //14 copy(vTar.begin(), itEnd, ostream_iterator<int>(cout, " ")); }
结果:
差集
set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest)
set_difference算法 求两个set集合的差集
注意:两个集合必须是有序序列
@param beg1 容器1开始迭代器
@param end1 容器1结束迭代器
@param beg2 容器2开始迭代器
@param end2 容器2结束迭代器
@param dest 目标容器开始迭代器
@return 目标容器的最后一个元素的迭代器地址
void test03() { vector<int>v1; vector<int>v2; for (int i = 0; i < 10; i++) { v1.push_back(i); v2.push_back(i + 5); } vector<int> vTar; //目标容器 vTar.resize(max(v1.size(),v2.size())); //取差集中空间大小较大的 vector<int>::iterator itEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTar.begin()); //v1 差 v2 cout << *(itEnd - 1) << endl; //14 copy(vTar.begin(), itEnd, ostream_iterator<int>(cout, " ")); cout << endl; itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTar.begin()); //v2 差 v1 cout << *(itEnd - 1) << endl; //14 copy(vTar.begin(), itEnd, ostream_iterator<int>(cout, " ")); cout << endl; }
结果: