设计并实现一个通用集合类
时间: 2024-02-21 19:02:29 浏览: 89
(类)设计并实现一个具有并,交差等功能的集合类.zip_集合类
好的,我可以为您提供一个通用的集合类的设计和实现。在C++中,我们通常使用模板来实现一个通用类,因为模板可以支持不同类型的元素。下面是一个基本的集合类的设计:
```c++
template <typename T>
class Set {
public:
Set() {}
~Set() {}
void add(T value); // 添加元素
void remove(T value); // 删除元素
bool contains(T value); // 是否包含元素
int size(); // 元素个数
void clear(); // 清空集合
void forEach(function<void(T)> action); // 遍历集合
void sort(function<bool(T, T)> compare); // 排序
private:
vector<T> data;
};
```
在上面的代码中,我们使用了vector来存储元素,因为vector是一个动态数组,可以方便地进行添加、删除和遍历操作。同时,我们也提供了一些常见操作的实现,例如添加、删除、查找、遍历和排序等。
需要注意的是,我们还使用了函数对象function来实现排序操作,这样可以方便地传入自定义的比较函数。
下面是集合类的实现:
```c++
template <typename T>
void Set<T>::add(T value) {
if (!contains(value)) {
data.push_back(value);
}
}
template <typename T>
void Set<T>::remove(T value) {
for (int i = 0; i < data.size(); i++) {
if (data[i] == value) {
data.erase(data.begin() + i);
break;
}
}
}
template <typename T>
bool Set<T>::contains(T value) {
for (int i = 0; i < data.size(); i++) {
if (data[i] == value) {
return true;
}
}
return false;
}
template <typename T>
int Set<T>::size() {
return data.size();
}
template <typename T>
void Set<T>::clear() {
data.clear();
}
template <typename T>
void Set<T>::forEach(function<void(T)> action) {
for (int i = 0; i < data.size(); i++) {
action(data[i]);
}
}
template <typename T>
void Set<T>::sort(function<bool(T, T)> compare) {
sort(data.begin(), data.end(), compare);
}
```
使用示例:
```c++
// 创建一个Set对象,存储整数
Set<int> set;
// 添加元素
set.add(3);
set.add(2);
set.add(1);
// 删除元素
set.remove(2);
// 查找元素
bool found = set.contains(1);
// 遍历元素
set.forEach([](int element) {
cout << element << " ";
});
// 排序
set.sort([](int a, int b) {
return a < b;
});
```
上面的代码展示了如何使用Set类进行各种操作,您可以根据自己的实际需求进行调整和扩展。
阅读全文