目录

1.set_intersection //求交集,v1、v2所有相同元素

2.set_union //求并集,v1、v2所有相同及不同元素

3.set_difference //求差集,v1中除去与v2相同的元素


程序源码:https://pan.baidu.com/s/1IttBVHazooui_VbHRTQAeA?pwd=kiws

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 ~ 9
		v2.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;
}

运行结果:

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐