实现Set模板类,并重载+、-<<和>>操作符
时间: 2023-06-13 22:06:59 浏览: 131
好的,以下是一个简单的实现示例:
```c++
#include <iostream>
#include <set>
template<typename T>
class Set
{
private:
std::set<T> m_set;
public:
Set() {}
Set(std::initializer_list<T> list)
: m_set(list)
{}
void insert(const T& value)
{
m_set.insert(value);
}
void remove(const T& value)
{
m_set.erase(value);
}
friend Set operator+(const Set& set1, const Set& set2)
{
Set result;
for (const auto& value : set1.m_set)
result.insert(value);
for (const auto& value : set2.m_set)
result.insert(value);
return result;
}
friend Set operator-(const Set& set1, const Set& set2)
{
Set result;
for (const auto& value : set1.m_set)
if (!set2.m_set.count(value))
result.insert(value);
return result;
}
friend std::ostream& operator<<(std::ostream& os, const Set& set)
{
os << "{ ";
for (const auto& value : set.m_set)
os << value << " ";
os << "}";
return os;
}
friend std::istream& operator>>(std::istream& is, Set& set)
{
T value;
is >> value;
set.insert(value);
return is;
}
};
int main()
{
Set<int> set1 = { 1, 2, 3 };
Set<int> set2 = { 2, 3, 4 };
std::cout << "set1 = " << set1 << std::endl;
std::cout << "set2 = " << set2 << std::endl;
Set<int> set3 = set1 + set2;
std::cout << "set1 + set2 = " << set3 << std::endl;
Set<int> set4 = set1 - set2;
std::cout << "set1 - set2 = " << set4 << std::endl;
std::cout << "Enter a value to insert into set1: ";
std::cin >> set1;
std::cout << "set1 = " << set1 << std::endl;
return 0;
}
```
以上代码定义了一个 `Set` 类,其中 `m_set` 是一个 `std::set` 对象,实现了两个成员函数 `insert` 和 `remove` 来插入和删除元素,以及 `operator+` 和 `operator-` 重载运算符实现集合的并集和差集,`operator<<` 和 `operator>>` 重载运算符用于输出和输入集合。在 `main` 函数中,我们创建了两个 `Set` 对象 `set1` 和 `set2`,并演示了如何使用重载的运算符进行集合操作,以及如何使用 `operator>>` 向 `set1` 中插入元素。
阅读全文