c++友元函数输入整数集合计算出它们进行集合的并、差和交运算后的结果,s1+s2 两个整数集合的并运算 s1-s2 两个整数集合的差运算 s1*s2 两个整数集合的交运算
时间: 2023-09-27 13:04:40 浏览: 137
c++友元函数与友元类的深入解析
好的,我来为您解答。
我们可以定义一个Set类,用于表示集合,并在其中定义对应的友元函数来实现集合的并、差和交运算。代码如下:
```c++
#include <iostream>
#include <set>
using namespace std;
class Set {
private:
set<int> data; // 底层数据结构使用set
public:
// 构造函数
Set() {}
// 析构函数
~Set() {}
// 友元函数,计算两个集合的并集
friend Set operator+(const Set &s1, const Set &s2) {
Set res;
set_union(s1.data.begin(), s1.data.end(), s2.data.begin(), s2.data.end(),
inserter(res.data, res.data.begin()));
return res;
}
// 友元函数,计算两个集合的差集
friend Set operator-(const Set &s1, const Set &s2) {
Set res;
set_difference(s1.data.begin(), s1.data.end(), s2.data.begin(), s2.data.end(),
inserter(res.data, res.data.begin()));
return res;
}
// 友元函数,计算两个集合的交集
friend Set operator*(const Set &s1, const Set &s2) {
Set res;
set_intersection(s1.data.begin(), s1.data.end(), s2.data.begin(), s2.data.end(),
inserter(res.data, res.data.begin()));
return res;
}
// 添加元素到集合中
void add(int x) {
data.insert(x);
}
// 输出集合
friend ostream &operator<<(ostream &out, const Set &s) {
out << "{ ";
for (auto it = s.data.begin(); it != s.data.end(); it++) {
out << *it << " ";
}
out << "}";
return out;
}
};
int main() {
Set s1, s2;
s1.add(9);
s1.add(5);
s1.add(4);
s1.add(3);
s1.add(6);
s1.add(7);
s2.add(2);
s2.add(4);
s2.add(6);
s2.add(9);
// 输出集合
cout << "s1: " << s1 << endl;
cout << "s2: " << s2 << endl;
// 求并集
Set s_union = s1 + s2;
cout << "s1 + s2: " << s_union << endl;
// 求差集
Set s_diff = s1 - s2;
cout << "s1 - s2: " << s_diff << endl;
// 求交集
Set s_intersection = s1 * s2;
cout << "s1 * s2: " << s_intersection << endl;
return 0;
}
```
输出结果如下:
```
s1: { 3 4 5 6 7 9 }
s2: { 2 4 6 9 }
s1 + s2: { 2 3 4 5 6 7 9 }
s1 - s2: { 3 5 7 }
s1 * s2: { 4 6 9 }
```
以上代码定义了一个Set类,其中使用了STL库中的set容器作为底层数据结构,定义了对应的友元函数来实现集合的并、差和交运算。主函数中创建了两个Set对象,添加了对应的元素,然后调用对应的运算符重载函数来计算集合的并、差和交,并输出结果。
阅读全文