1.实现Set模板类,并重载+、-<<和>>操作符;
时间: 2024-05-28 19:08:05 浏览: 118
Set模板类是一种集合,它可以存储一组不同的元素,并且它们是按照某种规则排列的。可以通过重载+、-、<<和>>操作符来实现Set模板类。在这里,我们需要定义一个模板类Set,这个类可以接受任意类型的元素作为其成员。
在定义Set类时,需要实现如下操作:
1. 实现一个构造函数,用于初始化Set对象;
2. 实现一个析构函数,用于销毁Set对象;
3. 重载+、-操作符,分别用于向Set对象中添加元素和从Set对象中删除元素;
4. 重载<<和>>操作符,分别用于输出和输入Set对象中的元素。
下面是一个简单的Set类的代码示例:
```cpp
#include <iostream>
#include <set>
using namespace std;
template<typename T>
class Set {
public:
Set() {}
virtual ~Set() {}
void add(const T& elem) {
m_data.insert(elem);
}
void remove(const T& elem) {
m_data.erase(elem);
}
friend Set operator+(const Set& s1, const Set& s2) {
Set s = s1;
for (auto it = s2.m_data.begin(); it != s2.m_data.end(); ++it) {
s.add(*it);
}
return s;
}
friend Set operator-(const Set& s1, const Set& s2) {
Set s = s1;
for (auto it = s2.m_data.begin(); it != s2.m_data.end(); ++it) {
s.remove(*it);
}
return s;
}
friend ostream& operator<<(ostream& os, const Set& s) {
os << "{ ";
for (auto it = s.m_data.begin(); it != s.m_data.end(); ++it) {
os << *it << " ";
}
os << "}";
return os;
}
friend istream& operator>>(istream& is, Set& s) {
T elem;
while (is >> elem) {
s.add(elem);
}
return is;
}
private:
set<T> m_data;
};
```
使用示例:
```cpp
int main() {
Set<int> s1, s2;
s1.add(1);
s1.add(2);
s1.add(3);
s2.add(2);
s2.add(3);
s2.add(4);
Set<int> s3 = s1 + s2; // 并集
Set<int> s4 = s1 - s2; // 差集
cout << "s1: " << s1 << endl;
cout << "s2: " << s2 << endl;
cout << "s1 + s2: " << s3 << endl;
cout << "s1 - s2: " << s4 << endl;
cin >> s1; // 输入集合元素
cout << "s1: " << s1 << endl;
return 0;
}
```
阅读全文