/*标砖模板库(stl)之集合(set)
*set是一系列相同类型数据的集合,具有自动排序功能
* */
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int main()
{
//定义模板类对象s1
set<int> s1 = {40, 11, 32, 21, 17, 50};
cout << "-------------------------------" << endl;
cout << "size = " << s1.size() << endl;
cout << "s1 = : ";
//范围for循环遍历
for (auto& m : s1) {
cout << m << " ";
}
cout << endl;
//定义迭代器
set <int> ::iterator it = s1.find(21);
//s8是从s1的首位(包含)到it(不包含)的集合,这里说s1的集合是指已经排序后的集合
set<int> s8(s1.begin(), it);
cout << "-------------------------------" << endl;
cout << "s8 = : ";
for (auto& m : s8) {
cout << m << " ";
}
cout << endl;
s1.insert(35);//在s1中插入35
s1.erase(11);//在s1中删除11
s1.insert(35);//在s1中再次插入35,此时系统默认忽略
cout << "-------------------------------" << endl;
cout << "s1 = : ";
for (auto& m : s1) {
cout << m << " ";
}
cout << endl;
set<int> s9 = s1;
cout << "-------------------------------" << endl;
cout << "s9 = : ";
for (auto& m : s9) {
cout << m << " ";
}
cout << endl;
set<int> s2 = {1, 11, 40, 6, 98, 71, 17};
cout << "-------------------------------" << endl;
cout << "取交集 : ";
set<int> s3;
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s3, s3.begin()));
for (int m : s3) {
cout << m << " ";
}
cout << endl;
cout << "-------------------------------" << endl;
cout << "取并集 : ";
set<int> s4;
set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s4, s4.begin()));
for (int m : s4) {
cout << m << " ";
}
cout << endl;
cout << "-------------------------------" << endl;
cout << "取差集 s1 - s2: ";
set<int> s5;
set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s5, s5.begin()));
for (int m : s5) {
cout << m << " ";
}
cout << endl;
cout << "-------------------------------" << endl;
cout << "取差集 s2 - s1: ";
set<int> s6;
set_difference(s2.begin(), s2.end(), s1.begin(), s1.end(), inserter(s6, s6.begin()));
for (int m : s6) {
cout << m << " ";
}
cout << endl;
cout << "-------------------------------" << endl;
cout << "取对称差集: ";//即除去相同的元素,剩下的所有元素的集合
set<int> s7;
set_symmetric_difference(s2.begin(), s2.end(), s1.begin(), s1.end(), inserter(s7, s7.begin()));
for (int m : s7) {
cout << m << " ";
}
cout << endl;
}
*set是一系列相同类型数据的集合,具有自动排序功能
* */
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int main()
{
//定义模板类对象s1
set<int> s1 = {40, 11, 32, 21, 17, 50};
cout << "-------------------------------" << endl;
cout << "size = " << s1.size() << endl;
cout << "s1 = : ";
//范围for循环遍历
for (auto& m : s1) {
cout << m << " ";
}
cout << endl;
//定义迭代器
set <int> ::iterator it = s1.find(21);
//s8是从s1的首位(包含)到it(不包含)的集合,这里说s1的集合是指已经排序后的集合
set<int> s8(s1.begin(), it);
cout << "-------------------------------" << endl;
cout << "s8 = : ";
for (auto& m : s8) {
cout << m << " ";
}
cout << endl;
s1.insert(35);//在s1中插入35
s1.erase(11);//在s1中删除11
s1.insert(35);//在s1中再次插入35,此时系统默认忽略
cout << "-------------------------------" << endl;
cout << "s1 = : ";
for (auto& m : s1) {
cout << m << " ";
}
cout << endl;
set<int> s9 = s1;
cout << "-------------------------------" << endl;
cout << "s9 = : ";
for (auto& m : s9) {
cout << m << " ";
}
cout << endl;
set<int> s2 = {1, 11, 40, 6, 98, 71, 17};
cout << "-------------------------------" << endl;
cout << "取交集 : ";
set<int> s3;
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s3, s3.begin()));
for (int m : s3) {
cout << m << " ";
}
cout << endl;
cout << "-------------------------------" << endl;
cout << "取并集 : ";
set<int> s4;
set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s4, s4.begin()));
for (int m : s4) {
cout << m << " ";
}
cout << endl;
cout << "-------------------------------" << endl;
cout << "取差集 s1 - s2: ";
set<int> s5;
set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s5, s5.begin()));
for (int m : s5) {
cout << m << " ";
}
cout << endl;
cout << "-------------------------------" << endl;
cout << "取差集 s2 - s1: ";
set<int> s6;
set_difference(s2.begin(), s2.end(), s1.begin(), s1.end(), inserter(s6, s6.begin()));
for (int m : s6) {
cout << m << " ";
}
cout << endl;
cout << "-------------------------------" << endl;
cout << "取对称差集: ";//即除去相同的元素,剩下的所有元素的集合
set<int> s7;
set_symmetric_difference(s2.begin(), s2.end(), s1.begin(), s1.end(), inserter(s7, s7.begin()));
for (int m : s7) {
cout << m << " ";
}
cout << endl;
}