集合
//------------------------------------集合---------------------------------// /* 题目描述 给你两个集合,要求{A} + {B}。 注:同一个集合中不会有两个相同的元素。 输入描述: 每组输入数据分为三行,第一行有两个数字n,m(0 ≤ n,m ≤ 10000),分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超过int范围的整数,每个元素之间有个空格隔开。 输出描述: 针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开,行末无空格。 示例1 输入 3 3 1 3 5 2 4 6 输出 1 2 3 4 5 6 */ /* 我使用了两种方法 第一种是标准库的set,用这个比较简单,不用判断数字是否重复,因为set就是不重复, 并且排序的集合,默认排序为升序,如果遇到相同的数,会直接忽略,不重复的数才放 入,在stl内部使用红黑树实现的,这是一个平衡二叉树,不做太多说明。 第二种用的vector,把所有数push_back进去,用算法sort排序后,用unique删除重 复元素(去除重复元素后,空间还是在那里,需要用erase删除空间) */ #include<iostream> #include<algorithm> #include<set> #include<vector> using namespace std; int f8() { //法1 int numA, numB; cin >> numA >> numB; int temp; set<int> s; for (int i = 0; i < numA; ++i) { cin >> temp; s.insert(temp); } for (int i = 0; i < numB; ++i) { cin >> temp; s.insert(temp); } auto ptr = s.cbegin(); for (int i = 0; i < s.size() - 1; ++i) { cout << *ptr << " "; ++ptr; } cout << *ptr; return 0; //法2 /* int numA, numB; cin >> numA >> numB; vector<int> A, B; int temp; for(int i = 0; i < numA; ++i) { cin >> temp; A.push_back(temp); } for(int i = 0; i < numB; ++i) { cin >> temp; B.push_back(temp); } vector<int> vec(A); for(int i = 0; i < B.size(); ++i) vec.push_back(B[i]); sort(vec.begin(), vec.end()); auto ptr = unique(vec.begin(), vec.end()); vec.erase(ptr, vec.end()); for(int i = 0; i < vec.size() - 1; ++i) cout << vec[i] << " "; cout << *(vec.cend() - 1); return 0; */ }
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一次 .NET 性能优化之旅:将 GC 压力降低 99%
· MySQL索引完全指南:让你的查询速度飞起来
· 一个字符串替换引发的性能血案:正则回溯与救赎之路
· 为什么说方法的参数最好不要超过4个?
· C#.Net 筑基-优雅 LINQ 的查询艺术
· 我用这13个工具,让开发效率提升了5倍!
· 一次 .NET 性能优化之旅:将 GC 压力降低 99%
· Coze工作流实战:一键生成鸡汤视频——厉害的人,早已戒掉情绪
· 32岁入行STM32迟吗?
· C++服务开发环境-万事开头难