首页 > 编程语言 >21.STL-常用集合算法

21.STL-常用集合算法

时间:2024-09-02 16:28:51浏览次数:13  
标签:begin set end 21 vTarget STL v2 v1 算法


  • 常用集合算法
  • set_intersection算法 求两个set集合的交集
  • set_union算法 求两个set集合的并集
  • set_difference算法 求两个set集合的差集
  • 注意:两个集合必须是有序序列
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include <vector>
#include <algorithm>

/*
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>vTarget;

	vTarget.resize(min(v1.size(), v2.size()));

	vector<int>::iterator itEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());

	for_each(vTarget.begin(), itEnd, [](int val){cout << val << " "; });
	cout << endl;
}


/*
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>vTarget;
	vTarget.resize(v1.size() + v2.size());
	vector<int>::iterator itEnd  = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());

	for_each(vTarget.begin(), itEnd , [](int val){cout << val << " "; });
	cout << endl;
}

/*
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>vTarget;
	vTarget.resize( max(v1.size(),v2.size()) );

	// A 与 B 差集
	//vector<int>::iterator itEnd  = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());

	// B 与 A 差集
	vector<int>::iterator itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin());


	for_each(vTarget.begin(), itEnd, [](int val){cout << val << " "; });
	cout << endl;

}


int main(){
	//test01();
	//test02();
	test03();

	system("pause");
	return EXIT_SUCCESS;
}


标签:begin,set,end,21,vTarget,STL,v2,v1,算法
From: https://blog.51cto.com/zaishu/11898893

相关文章

  • java采用base64算法加密用户名和密码
    这里做简单记录来记录整个过程。1.首先引入前端base64.js(这里我就直接放到代码块里)2.使用base64在登陆界面加密用户名和密码3.在后端构建base64解密文件,并解密前端的用户名和密码代码如下:1.base64.js代码(创建js文件保存即可用)/*!*jquery.base64.js0.1-https://github.......
  • python入门每日一练2023/2/21
    python入门每日一练,可以提高您的python水平,今天是2月21日,由于博主前段时间比较繁忙,最近都没有发,请谅解!上一课的答案是print("--------欢迎光临----------")print('初始化完成')defsayhello():print("hello")foriinrange(1,10)if1==1:print(i......
  • (算法)数据流中的第K⼤元素————<堆>
    1.题⽬链接:703.数据流中的第K⼤元素2.题⽬描述:3.解法(优先级队列):算法思路:我相信,看到TopK问题的时候,兄弟们应该能⽴⻢想到「堆」,这应该是刻在⻣⼦⾥的记忆。 C++算法代码:classKthLargest{public://创建一个小根堆priority_queue<int,vector<int>,gre......
  • (算法)最后⼀块⽯头的重量————<堆>
    1.题⽬链接:1046.最后⼀块⽯头的重量2.题⽬描述:3.解法(利⽤堆):算法思路:其实就是⼀个模拟的过程:•每次从⽯堆中拿出最⼤的元素以及次⼤的元素,然后将它们粉碎;•如果还有剩余,就将剩余的⽯头继续放在原始的⽯堆⾥⾯重复上⾯的操作,直到⽯堆⾥⾯只剩下⼀个元素,或者没有元......
  • NAT 网关,型号 SG-NAT-210,详细介绍
    一、产品概述1.1产品用途SG-NAT-210网关支持IP地址跨网段和通讯端口的转换,为不方便修改参数的以太网通讯设备的信息化联网提供便捷的解决方案。网关有1个两口以太网交换机接口(LAN口)和1个以太网通讯接口(WAN口)。不对原系统做任何硬件和软件修改,不影响原系统通......
  • 1. STL-STL概论,STL初识
    STL概论STL六大组件容器、算法、迭代器、仿函数、适配器、空间配置器STL优点内建在C++编译器中,不需要安装额外内容不需要了解具体实现内容,只要熟练运用即可高复用,可移植,高性能容器划分序列式容器关联式容器有个key起到索引作用算法质变算法非质变算法STL......
  • 《DNK210使用指南 -CanMV版 V1.0》第二十一章 machine.UART类实验
    第二十一章machine.UART类实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html......
  • 一个数独生成算法
    思路:创建一个9*9的数独数组,挨个往里面插入1-9的数值,并且验证该数值插入是否合理,该数值插入之后是否会导致生成错误数据,最后生成一张随机数独数据functiongetShuDu(){//创建初始数组letshudu=newArray(9);for(leti=0;i<9;i++){shudu[i]=newArray(9).fill(0)......
  • 模拟信号采集卡设计方案:FMC210-1路1Gsps AD、1路2.5Gsps DA的FMC子卡 信号采集卡
    FMC210-1路1GspsAD、1路2.5GspsDA的FMC子卡  一、板卡概述   FMC-1AD2DA是北京太速科技自主研发的一款1路1GAD采集、1路2.5GDA回放的FMC子卡。板卡采用标准FMC子卡架构,可方便的与其他FMC板卡实现高速互联,可广泛用于高频模拟信号采集、雷达系统测......
  • YOLOS:大道至简,直接使用预训练ViT进行实时目标检测 | NeurIPS 2021
    论文探索了在中型ImageNet-1k数据集上预训练的普通ViT到更具挑战性的COCO目标检测基准的可迁移性,提出了基于VisionTransformer的YouOnlyLookatOneSequence(YOLOS)目标检测模型。在具有挑战性的COCO目标检测基准上的实验结果表明,2D目标检测可以以纯sequence-to-sequence的方......