Please program to realize the operations of sets: Union, Intersection, Difference, Complement, Symmetric difference and power set.用c++写
时间: 2024-09-21 22:09:18 浏览: 67
在C++中,我们可以使用`std::set`容器以及其提供的操作来实现集合的并集、交集、差集、补集、对称差集和幂集。这里是一个简单的示例:
```cpp
#include <iostream>
#include <set>
#include <vector>
// 函数模板用于操作集合
template<typename T>
void union_set(const std::set<T>& set1, const std::set<T>& set2, std::set<T>& result) {
result = set1;
result.insert(set2.begin(), set2.end());
}
template<typename T>
void intersection_set(const std::set<T>& set1, const std::set<T>& set2, std::set<T>& result) {
result.clear();
for (const auto& item : set1) {
if (set2.find(item) != set2.end()) {
result.insert(item);
}
}
}
template<typename T>
void difference_set(const std::set<T>& set1, const std::set<T>& set2, std::set<T>& result) {
result = set1;
result.erase(std::remove(result.begin(), result.end(), set2.begin(), set2.end()), result.end());
}
template<typename T>
void complement_set(const std::set<T>& full_set, const std::set<T>& subset, std::set<T>& result) {
result = full_set;
result.erase(subset.begin(), subset.end());
}
template<typename T>
void symmetric_difference_set(const std::set<T>& set1, const std::set<T>& set2, std::set<T>& result) {
result.clear();
result.insert(std::set_difference(set1.begin(), set1.end(), set2.begin(), set2.end()));
result.insert(std::set_difference(set2.begin(), set2.end(), set1.begin(), set1.end()));
}
// 动态生成所有元素的幂集
template<typename T>
std::vector<std::set<T>> power_set(const std::set<T>& base_set) {
std::vector<std::set<T>> power(base_set.size() + 1);
power[0] = {};
for (size_t i = 1; i <= base_set.size(); ++i) {
for (const auto& element : base_set) {
power[i].insert(element);
power[i - 1].insert(element);
}
}
return power;
}
int main() {
std::set<int> set1 = {1, 2, 3};
std::set<int> set2 = {2, 4, 5};
std::set<int> union_result;
intersection_set(set1, set2, union_result);
std::cout << "Intersection: ";
for (const auto& item : union_result) {
std::cout << item << " ";
}
std::cout << "\n";
// ... (重复上述步骤,替换相应的函数名)
return 0;
}
```
这段代码展示了如何分别实现集合的各种操作。注意,对于幂集,我们使用了嵌套循环的方式,这并不是最优解,尤其是在处理大集合时。实际应用中可能会考虑使用回溯算法或其他更高效的策略。
阅读全文