C++实现Set模板类,并重载+,-,<<和>>操作符
时间: 2024-04-30 15:19:54 浏览: 10
下面是一个简单的Set模板类的实现,并重载了+,-,<<和>>操作符:
```c++
#include <iostream>
#include <set>
template<typename T>
class Set {
public:
Set() {}
Set(const std::set<T>& s) : data(s) {}
Set<T> operator+(const Set<T>& rhs) const {
std::set<T> result(data);
for (auto it = rhs.data.begin(); it != rhs.data.end(); ++it) {
result.insert(*it);
}
return Set<T>(result);
}
Set<T> operator-(const Set<T>& rhs) const {
std::set<T> result(data);
for (auto it = rhs.data.begin(); it != rhs.data.end(); ++it) {
result.erase(*it);
}
return Set<T>(result);
}
friend std::ostream& operator<<(std::ostream& os, const Set<T>& s) {
os << "{ ";
for (auto it = s.data.begin(); it != s.data.end(); ++it) {
os << *it << " ";
}
os << "}";
return os;
}
friend std::istream& operator>>(std::istream& is, Set<T>& s) {
T value;
while (is >> value) {
s.data.insert(value);
}
return is;
}
private:
std::set<T> data;
};
int main() {
Set<int> s1, s2;
std::cout << "Enter values for set 1: ";
std::cin >> s1;
std::cout << "Enter values for set 2: ";
std::cin >> s2;
std::cout << "Set 1: " << s1 << std::endl;
std::cout << "Set 2: " << s2 << std::endl;
std::cout << "Set 1 + Set 2: " << s1 + s2 << std::endl;
std::cout << "Set 1 - Set 2: " << s1 - s2 << std::endl;
return 0;
}
```
在这个示例中,我们使用了STL中的set作为Set的内部数据结构。我们重载了+和-操作符来实现集合的并和差运算。我们还重载了<<和>>操作符,以便可以像使用std::cin和std::cout一样输入和输出Set对象。
注意,在这个示例中,我们假设输入的元素是整数。如果要使用其他类型的元素,需要相应地修改代码。