c++类模板设计并实现一个通用集合类
时间: 2024-01-23 08:03:53 浏览: 74
好的,我可以帮您解答这个问题。首先,我们需要明确集合类的功能和特点,它应该是一个能够存储多个元素的容器,支持添加、删除、查找、遍历和排序等常见操作。
在C++中,我们可以使用类模板来实现一个通用的集合类,具体实现如下:
```c++
template<typename T>
class Set {
private:
vector<T> data; // 用vector存储元素
public:
// 添加元素
void add(T element) {
data.push_back(element);
}
// 删除元素
void remove(T element) {
for (int i = 0; i < data.size(); i++) {
if (data[i] == element) {
data.erase(data.begin() + i);
return;
}
}
}
// 查找元素
bool contains(T element) {
for (int i = 0; i < data.size(); i++) {
if (data[i] == element) {
return true;
}
}
return false;
}
// 返回元素个数
int size() {
return data.size();
}
// 遍历元素
void forEach(function<void(T)> action) {
for (int i = 0; i < data.size(); i++) {
action(data[i]);
}
}
// 排序
void sort(function<bool(T, T)> compare) {
sort(data.begin(), data.end(), compare);
}
};
```
上面的代码中,我们使用了vector来存储元素,因为vector是一个动态数组,可以方便地进行添加、删除和遍历操作。同时,我们也提供了一些常见操作的实现,例如添加、删除、查找、遍历和排序等。
需要注意的是,我们还使用了函数对象function来实现排序操作,这样可以方便地传入自定义的比较函数。
使用示例:
```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类进行各种操作,您可以根据自己的实际需求进行调整和扩展。
阅读全文