创建一个名为 MyVector 的类,使其公有继承 C++中的 vector<double>,并添加统计功能, 例如平均值、中位数和标准差。
时间: 2024-02-18 22:03:11 浏览: 90
好的,我理解了你的要求,以下是 MyVector 类的实现示例:
```c++
#include <vector>
#include <algorithm>
#include <cmath>
class MyVector : public std::vector<double> {
public:
double average() const {
double sum = 0;
for (const auto& elem : *this) {
sum += elem;
}
return sum / size();
}
double median() const {
auto v = *this;
std::sort(v.begin(), v.end());
int n = size();
if (n % 2 == 0) {
return (v[n/2-1] + v[n/2]) / 2;
} else {
return v[n/2];
}
}
double standardDeviation() const {
double avg = average();
double sum = 0;
for (const auto& elem : *this) {
sum += (elem - avg) * (elem - avg);
}
return std::sqrt(sum / size());
}
};
```
在 MyVector 类中,我们公有继承了 vector<double>,即 MyVector 继承了 vector 的所有成员函数和操作,同时添加了三个新的成员函数:average()、median() 和 standardDeviation(),用于计算 MyVector 中的平均值、中位数和标准差。
其中,average() 函数使用 for 循环计算 MyVector 中所有元素的和,再除以元素个数得到平均值;median() 函数先复制 MyVector,然后使用 sort 函数对复制出来的 vector 进行排序,最后根据元素个数的奇偶性计算中位数;standardDeviation() 函数先计算平均值,然后再用 for 循环计算每个元素与平均值的差的平方和,最后除以元素个数并开方得到标准差。
你可以在使用 MyVector 时,像使用普通的 vector 一样使用它的所有成员函数和操作,并且可以直接调用 MyVector 中的三个新函数来获取平均值、中位数和标准差。
阅读全文