设计适当的成员函数,实现支持添加,删除元素,求和,求平均值,查找,排序。
时间: 2024-03-18 08:38:30 浏览: 24
好的,我可以为您设计一个支持这些操作的类模板,具体实现如下:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
template <typename T>
class StatisticSet {
private:
std::vector<T> data;
public:
// 添加元素
void insert(T x) {
data.push_back(x);
}
// 删除元素
void remove(T x) {
for (typename std::vector<T>::iterator it = data.begin(); it != data.end(); ++it) {
if (*it == x) {
data.erase(it);
break;
}
}
}
// 求和
T sum() {
T res = 0;
for (typename std::vector<T>::iterator it = data.begin(); it != data.end(); ++it) {
res += *it;
}
return res;
}
// 求平均值
double average() {
if (data.empty()) {
return 0;
}
T sum = this->sum();
return static_cast<double>(sum) / data.size();
}
// 查找元素是否存在
bool contains(T x) {
for (typename std::vector<T>::iterator it = data.begin(); it != data.end(); ++it) {
if (*it == x) {
return true;
}
}
return false;
}
// 排序
void sort() {
std::sort(data.begin(), data.end());
}
// 输出集合中的元素
void print() {
std::cout << "[";
for (typename std::vector<T>::iterator it = data.begin(); it != data.end(); ++it) {
std::cout << *it;
if (it != data.end() - 1) {
std::cout << ", ";
}
}
std::cout << "]" << std::endl;
}
};
```
这个类模板支持添加、删除、求和、求平均值、查找、排序等基本集合操作,同样使用 `vector` 存储元素。其中,`insert` 函数直接在 `vector` 后面添加元素;`remove` 函数在删除元素时也是遍历整个 `vector`,找到第一个等于要删除元素的位置并删除;`sum` 函数遍历整个 `vector`,累加所有元素的值;`average` 函数先调用 `sum` 函数求和,然后计算平均值;`contains` 函数同样是遍历整个 `vector`,判断是否存在相同元素;`sort` 函数使用 `std::sort` 函数进行升序排序。此外,还提供了输出集合中的元素等辅助函数。
您可以通过实例化 `StatisticSet` 类模板来创建不同类型的集合,例如:
```c++
StatisticSet<int> intSet;
intSet.insert(1);
intSet.insert(2);
intSet.insert(3);
intSet.print(); // 输出:[1, 2, 3]
std::cout << intSet.sum() << std::endl; // 输出:6
std::cout << intSet.average() << std::endl; // 输出:2
std::cout << intSet.contains(2) << std::endl; // 输出:1
intSet.remove(2);
intSet.print(); // 输出:[1, 3]
intSet.sort();
intSet.print(); // 输出:[1, 3]
```
希望这个类模板能够满足您的需求。