给你两个集合,要求{A} + {B}

news/2025/2/11 20:12:30/

先看题:
在这里插入图片描述
看完题后你会觉得:哇,好简单,STL一下就出来啦。

#include <iostream>
#include <set>using namespace std;int main() {int n, m;while (cin >> n >> m) {set<int> set_a;for (int i = 0; i < n+m; i++) {int element;cin >> element;set_a.insert(element);}for (const auto& element : set_a) {cout << element << " ";}cout << endl;}return 0;
}

可能会有一点点的变式,也就是把 set set_a;放循环外面,循环中加一个set_a.clear();
如果你不想使用循环遍历容器也可以使用迭代器遍历,
当然这段代码有一点点小问题,最后一个数的后面应该不含空格
例下:来自这里

#include <iostream>
#include <set>
using namespace std;int main()
{int n, m, val;set<int> result;while(cin >> n >> m) {result.clear();for(int i=1; i<=n+m; i++) {cin >> val;result.insert(val);}bool nofirstflag = false;for(set<int>::iterator it = result.begin(); it != result.end(); it++) {if(nofirstflag)cout << " ";nofirstflag = true;cout << *it;}cout << endl;}return 0;
}

当然也有可能用的数组:

#include <iostream>
#include <algorithm>
#include <vector>using namespace std;int main()
{int n, m;while(cin>>n>>m){int temp;vector <int> vector_a;for (int i = 0; i < n+m; i++){cin >> temp;vector_a.push_back(temp);}sort(vector_a.begin(), vector_a.end());cout << vector_a[0];for (int i = 1; i < n+m; i++)if (vector_a[i] != vector_a[i-1])cout << " " << vector_a[i];cout<<endl;}}

常规的看完了,让我们看看“非常规“的:

#include <iostream>
#include <set>using namespace std;int main() {int n, m;while (cin >> n >> m) {set<int> set_a;set<int> set_b;for (int i = 0; i < n; i++) {int element;cin >> element;set_a.insert(element);}for (int i = 0; i < m; i++) {int element;cin >> element;set_b.insert(element);}set<int> union_set;for (const auto& element : set_a) {union_set.insert(element);}for (const auto& element : set_b) {union_set.insert(element);}for (const auto& element : union_set) {cout << element << " ";}cout << endl;}return 0;
}

这是我第一次通过的,可以看到几乎没有用到一点set的用处,多了两个for循环,在逻辑上多占了一倍的空间,多耗费了一倍的时间。当我们学会了STL的时候,不仅可以解决上述问题,更重要的是,繁杂重复的代码会将你的思路打断,让你感觉敲代码像是搬砖,并且代码一多会使代码的可读性大打折扣,这可不好,你总不能说,这段代码真差,结果一查,是你一个月前写的。


http://www.ppmy.cn/news/1125988.html

相关文章

分享从零开始学习网络设备配置--任务3.8 使用动态路由OSPF实现网络连通

任务描述 某公司随着规模的不断扩大&#xff0c;路由器的数量在原有的基础上有所增加。网络管理员发现原有的路由协议已经不适合现有的网络环境&#xff0c;可实施动态路由OSPF协议配置&#xff0c;实现网络中所有主机之间互相通信。因为动态路由OSPF协议可以实现快速收敛&…

[git] 撤销 git reset –hard

要撤销 git reset –hard origin/master&#xff0c;我们可以使用 Git 的 reflog 功能。Git reflog 记录了仓库中每一个 HEAD 的更改历史。通过查看 reflog&#xff0c;我们可以找到之前的 HEAD 和分支位置&#xff0c;从而找回丢失的提交。 首先&#xff0c;使用以下命令查看…

统计的基本概念及抽样分布

文章目录 &#x1f34b;引言&#x1f34b;总体&#xff08;Population&#xff09;&#x1f34b;总体参数 &#x1f34b;样本&#xff08;Sample&#xff09;&#x1f34b;随机样本&#x1f34b;样本统计量 &#x1f34b;统计量&#xff08;Statistic&#xff09;&#x1f34b;…

【C++】stack queue

stack & queue 一、容器适配器二、deque&#xff08;了解&#xff09;三、stack1. stack 的介绍2. 模拟实现 stack 四、queue1. queue 的使用2. 模拟实现 queue3. priority_queue&#xff08;1&#xff09;priority_queue 的介绍&#xff08;2&#xff09;priority_queue 的…

RestSharp使用

RestSharp 应该是 .Net 目前最流行的Restful Api 客户端库 官方文档 安装 dotnet add package RestSharp或者 NuGet搜索 RestSharp 快速入门 var client new RestClient(); // client.AddDefaultParameter("foo", "bar"); 这样每个请求都自带这个参数…

Super Marker插件——标记资源,提高效率

插件介绍&#xff1a; 这是一款可以给资源添加颜色或图标标记&#x1f4cc;的插件&#xff0c;当资源文件比较多的时候&#xff0c;颜色标记可以让你一眼定位到要使用的资源&#xff0c;提高开发效率。 插件地址&#xff1a; Cocos商店&#xff1a;https://store.cocos.com/a…

OpenCV cv::Mat和QImage互相转换

在使用OpenCV和Qt进行图像处理时&#xff0c;经常需要将cv::Mat和QImage之间进行转换。下面是cv::Mat和QImage之间的相互转换方法&#xff1a; 将cv::Mat转换为QImage&#xff1a; cv::Mat cvImage; // 你的cv::Mat图像// 将cv::Mat转换为QImage QImage qtImage(cvImage.data…

词法分析中的“贪心法”

词法分析中的“贪心法” 陷进问题引入贪心法的解释一个小题目 陷进问题引入 #include <stdio.h> int main() {int a 1;int b 2;int* c &b;printf("%d", a/*c);return 0; }问&#xff1a; 上面代码输出什么&#xff1f;   有人说是0&#xff0c; 也有…