Java教程

常用集合算法

本文主要是介绍常用集合算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include<iostream>
#include<string>
#include<vector>
using namespace std;
#include<algorithm>
#include<functional>
#include<ctime>

void myPrint(int val)
{
	cout << val << "  ";
}


//常用集合算法
//set_intersection

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>v;
	//目标容器需要提前开辟空间
	//最特殊的情况 取小容器的size
	v.resize(min(v1.size(), v2.size()));

	//获取交集
	vector<int>::iterator itEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), v.begin());
	for_each(v.begin(), itEnd, myPrint);
	cout << endl;
}

//set_union
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>v;
	//目标容器提前开辟空间
	//最特殊的情况 两个容器没有交集,并集就是两个容器size相加

	v.resize(v1.size() + v2.size());

	vector<int>::iterator itEnd= set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v.begin());
	for_each(v.begin(), itEnd, myPrint);
	cout << endl;
}

//set_difference 差集
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>v;
	//给目标容器开辟空间   去两个容器中打的size作为目标容器开辟的空间
	v.resize(max(v1.size(), v2.size()));

	cout << "v1和v2的差集为:" << endl;
	vector<int>::iterator itEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(),v.begin());
	for_each(v.begin(), itEnd, myPrint);
	cout << endl;

	cout << "v2和v1的差集为:" << endl;
	vector<int>::iterator itEnd1 = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), v.begin());
	for_each(v.begin(), itEnd1, myPrint);
	cout << endl;

}

int main()
{
	test03();
}


这篇关于常用集合算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!