状课网-少儿编程网课专业平台
在 C++ STL 中有一类算法称为集合操作,是指对已排序序列进行的集合代数运算。
集合代数发展并描述了集合的基本性质和规律,集合论运算,如并集、交集、补集,以及集合的关系,如等于、包含。
这门学科系统研究如何来表达和进行上述的运算和关系的操作。
Wikipedia
STL 中有着关于序列的交集,并集,差集,对称差集以及包含关系,以下我们逐一讲解这几种函数。
交集运算 set_intersection()
函数是求得由两个已排序序列在指定范围内都存在的元素构成的排序范围。
交集|Wikipedia
基本的 set_intersection
算法接收 5 个参数:
first1
last1
first2
first2
d_first
代码示例:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
// 初始化 v1, v2, v_intersection
vector<int> v1 = {3, 5, 7, 9}, v2 = {9, 8, 7, 6}, v_intersection;
// v1, v2 排序
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
// 调用 set_intersection
set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v_intersection));
// 输出 v_intersection
for (auto i = v_intersection.begin(); i < v_intersection.end(); ++i) {
cout << *i << " ";
}
return 0;
}
/*
output
7 9
*/
函数 set_union
是求得两个序列的并集,参数与交集一致。
并集|Wikipedia
代码示例:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
// 初始化 v1, v2, v_union
vector<int> v1 = {3, 5, 7, 9}, v2 = {9, 8, 7, 6}, v_union;
// v1, v2 排序
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
// 调用 set_union
set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v_union));
// 输出 v_union
for (auto i = v_union.begin(); i < v_union.end(); ++i) {
cout << *i << " ";
}
return 0;
}
/*
output
3 5 6 7 8 9
*/
函数 set_difference()
是求得两个序列的差集,参数与上述函数一致。
差集|Wikipedia
代码示例:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
// 初始化 v1, v2, v_difference
vector<int> v1 = {3, 5, 7, 9}, v2 = {9, 8, 7, 6}, v_difference;
// v1, v2 排序
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
// 调用 set_difference
set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v_difference));
// 输出 v_difference
for (auto i = v_difference.begin(); i < v_difference.end(); ++i) {
cout << *i << " ";
}
return 0;
}
/*
output
3 5
*/
函数 set_symmetric_difference()
是求得两个函数的对称差集,这个集合操作的名字不是很好理解,但看图就一目了然了:
对称差集|Programiz
代码示例:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
// 初始化 v1, v2, v_symmetric_difference
vector<int> v1 = {3, 5, 7, 9}, v2 = {9, 8, 7, 6}, v_symmetric_difference;
// v1, v2 排序
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
// 调用 set_symmetric_difference
set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v_symmetric_difference));
// 输出 v_symmetric_difference
for (auto i = v_symmetric_difference.begin(); i < v_symmetric_difference.end(); ++i) {
cout << *i << " ";
}
return 0;
}
/*
output
3 5 6 8
*/
函数 includes()
是判读两个集合的包含关系,若集合 1 包含集合 2,则返回 true
,否则返回 false
。
子集 & 超集|Wikipedia
基本的 include()
函数接收 4 个参数:
first1
last1
first2
last2
代码示例:
#include<iostream>
#include<algorithm>
#include<vector>
#include<cctype>
using namespace std;
int main() {
// 初始化 v1, v2
vector<int> v1 = {6, 8}, v2 = {9, 8, 7, 6};
// v1, v2 排序
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
cout << boolalpha;
// 调用 includes
cout << "v1 includes v2: " << includes(v1.begin(), v1.end(), v2.begin(), v2.end()) << endl;
cout << "v2 includes v1: " << includes(v2.begin(), v2.end(), v1.begin(), v1.end()) << endl;
return 0;
}
/*
output
v1 includes v2: false
v2 includes v1: true
*/
代码分析:
从两个序列的元素不难发现,集合 v2
包含集合 v1
,反之是不成立的,输出的结果也验证了这一点。
文章来源:少儿信息学竞赛
1要不要学少儿编程,看完这六件事你就知道了1、编程帮助孩子培养逻辑思维能力和抽象思维能力。孩子要将解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。孩子在学习少儿
22021-07-26 17:26:42
1今天咨询了编程数学课,可孩子已经在学编程了,再学习scratch还有意义吗?学习编程数学和学习少儿编程是不冲突的。少儿编程更注重的是编程语言的学习,编程数学本质上是数学课,只不过利用Scratch作为辅助工具,通过算法思维加深学生对数学知
02021-09-03 13:42:58
有理数是初中数学“数与代数”领域中的重要内容之一,下面是小编整理的内容,供大家参考。有理数是什么意思有理数是能够表示成两个整数之比的数,包括整数,有限小数和无限循环小数整数和分数统称为有理数。数学上,有理数是一个整数a和一个非零整数b的比,
02021-09-15 15:37:44
C++编程课程包括C++基础课程,普及组算法课程及提高组算法课程。适合高年级以上学员学习。
42021-09-17 15:02:54
同号两数相加,取与加数相同的符号,并把绝对值相加。减去一个数,等于加上这个数的相反数。接下来给大家分享有理数的加减法运算法则及顺口溜。有理数加减运算法则有理数加法运算法则(1)同号两数相加,取与加数相同的符号,并把绝对值相加。(2)异号两数
02021-09-22 14:57:40