设计和实现整型集合类(Set),其成员函数要求如下: (1)填加构造函数完成初始化 (2)能添加一个元素,元素不重复 (3)能删除一个元素 (4)输出所有元素 (5)求两个集合对象的交集 (6)求两个集合对象的并集 (7)求两个集合对象的差集
时间: 2024-02-03 20:01:44 浏览: 85
以下是一个可能的实现:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
class Set {
private:
std::vector<int> elements;
public:
Set() {}
void add(int element) {
if (!contains(element)) {
elements.push_back(element);
}
}
void remove(int element) {
auto it = std::find(elements.begin(), elements.end(), element);
if (it != elements.end()) {
elements.erase(it);
}
}
void print() {
std::cout << "{ ";
for (auto element : elements) {
std::cout << element << " ";
}
std::cout << "}" << std::endl;
}
Set intersection(const Set& other) const {
Set result;
for (auto element : elements) {
if (other.contains(element)) {
result.add(element);
}
}
return result;
}
Set union_with(const Set& other) const {
Set result;
for (auto element : elements) {
result.add(element);
}
for (auto element : other.elements) {
result.add(element);
}
return result;
}
Set difference(const Set& other) const {
Set result;
for (auto element : elements) {
if (!other.contains(element)) {
result.add(element);
}
}
return result;
}
private:
bool contains(int element) const {
return std::find(elements.begin(), elements.end(), element) != elements.end();
}
};
int main() {
Set s1;
s1.add(1);
s1.add(2);
s1.add(3);
s1.print(); // { 1 2 3 }
Set s2;
s2.add(2);
s2.add(3);
s2.add(4);
s2.print(); // { 2 3 4 }
Set s3 = s1.intersection(s2);
s3.print(); // { 2 3 }
Set s4 = s1.union_with(s2);
s4.print(); // { 1 2 3 4 }
Set s5 = s1.difference(s2);
s5.print(); // { 1 }
}
```
在这个实现中,整型集合类使用了一个 `std::vector<int>` 来存储元素。添加元素时,会先检查是否已经存在,如果不存在就加入。删除元素时,会使用 `std::find` 函数找到要删除的元素,并使用 `std::vector::erase` 方法删除。输出所有元素时,会使用一个循环遍历所有元素并输出。求交集、并集和差集时,会遍历一个集合中的所有元素,并检查它是否也存在于另一个集合中。如果存在,则加入结果集合中。
需要注意的是,这个实现中没有处理重复元素的情况。如果添加了重复元素,会导致输出时出现重复。如果需要处理重复元素,可以使用一个 `std::set<int>` 代替 `std::vector<int>`。
阅读全文