目录
1.set_intersection //求交集,v1、v2所有相同元素
2.set_union //求并集,v1、v2所有相同及不同元素
3.set_difference //求差集,v1中除去与v2相同的元素
1.set_intersection //求交集,v1、v2所有相同元素
功能描述:
求两个容器的交集
函数原型:
// 求两个集合的交集
// beg1 容器1开始迭代器 end1 容器1结束迭代器 beg2 容器2开始迭代器
// end2 容器2结束迭代器 dest 目标容器开始迭代器
// 注意:两个集合必须是有序序列//函数返回值:结果集合的结束位置迭代器
set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
程序:
#include<iostream>
using namespace std;
#include <vector>
#include <algorithm>//遍历打印
void printVector1(vector<int>&v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << "--- print end ---" << endl;
}
//
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 ~ 9v2.push_back(i + 5); // 5 ~ 14}cout << " v1 数据: ";printVector1(v1);cout << " v2 数据: ";printVector1(v2);vector<int>vTarget;//目标容器需要提前开辟空间//最特殊情况 大容器包含小容器 开辟空间 取小容器的size即可vTarget.resize(min(v1.size(), v2.size()));//获取交集vector<int>::iterator itEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());//遍历,并打印cout << " v1和v2 交集(v1和v2都有的)数据: ";for_each(vTarget.begin(), itEnd, myPrint);cout << endl;
}int main()
{test01();system("pause");return 0;
}
运行结果:
2.set_union //求并集,v1、v2所有相同及不同元素
功能描述:
求两个集合的并集
函数原型:
// 求两个集合的并集
// 注意:两个集合必须是有序序列// beg1 容器1开始迭代器 end1 容器1结束迭代器 beg2 容器2开始迭代器
// end2 容器2结束迭代器 dest 目标容器开始迭代器
//函数返回值:结果集合的结束位置迭代器
set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
程序:
#include<iostream>
using namespace std;
#include <vector>
#include <algorithm>//遍历打印
void printVector1(vector<int>&v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << "--- print end ---" << endl;
}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);v2.push_back(i + 5);}cout << " v1 数据: ";printVector1(v1);cout << " v2 数据: ";printVector1(v2);vector<int>vTarget;//目标容器提前开辟空间//最特殊情况 两个容器没有交集,并集就是两个容器size相加vTarget.resize(v1.size() + v2.size());vector<int>::iterator itEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());cout << " v1和v2 并集(v1、v2所有相同及不同元素)数据: ";for_each(vTarget.begin(), itEnd, myPrint);cout << endl;
}int main()
{test01();system("pause");return 0;
}
运行结果:
3.set_difference //求差集,v1中除去与v2相同的元素
功能描述:
求两个集合的差集
函数原型:
// 求两个集合的差集
// 注意:两个集合必须是有序序列// beg1 容器1开始迭代器 end1 容器1结束迭代器 beg2 容器2开始迭代器
// end2 容器2结束迭代器 dest 目标容器开始迭代器
//函数返回值:结果集合的结束位置迭代器
set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
程序:
#include<iostream>
using namespace std;
#include <vector>
#include <algorithm>//遍历打印
void printVector1(vector<int>&v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << "--- print end ---" << endl;
}void myPrint(int val)
{cout << val << " ";
}//常用集合算法 set_difference
void test01()
{vector<int>v1;vector<int>v2;for (int i = 0; i < 10; i++){v1.push_back(i);v2.push_back(i+5);}cout << " v1 数据: ";printVector1(v1);cout << " v2 数据: ";printVector1(v2);//创建目标容器vector<int>vTarget;//给目标容器开辟空间//最特殊情况 两个容器没有交集 取两个容器中大的size作为目标容器开辟空间vTarget.resize( max(v1.size(),v2.size()) );cout << "v1和v2的差集(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);//遍历打印cout << endl;cout << "v2和v1的差集(v2除去与v1相同的元素)为:" << endl;itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, myPrint);cout << endl;
}int main()
{test01();system("pause");return 0;
}
运行结果: