优化一下这段代码,让编译器自动计算均值和标准差
时间: 2024-01-17 19:03:47 浏览: 82
可以使用C++11中的std::accumulate函数和lambda表达式来计算均值和标准差,并使用C++17中的std::transform_reduce函数来进行并行化计算。代码如下:
```c++
#include <iostream>
#include <vector>
#include <numeric>
#include <cmath>
#include <execution>
int main() {
// 生成一些随机数据
std::vector<double> data(1000000);
for (int i = 0; i < data.size(); ++i) {
data[i] = static_cast<double>(rand()) / RAND_MAX;
}
// 计算均值和标准差
double mean = std::accumulate(std::execution::par, data.begin(), data.end(), 0.0,
[](double acc, double x) { return acc + x; }) / data.size();
double stddev = std::sqrt(std::transform_reduce(std::execution::par, data.begin(), data.end(),
0.0, std::plus<double>(), [mean](double x) { return (x - mean) * (x - mean); }) / data.size());
std::cout << "Mean: " << mean << std::endl;
std::cout << "Standard deviation: " << stddev << std::endl;
return 0;
}
```
这里的std::accumulate函数使用了并行执行策略std::execution::par,这将使编译器自动并行化计算。std::transform_reduce函数也使用了相同的执行策略。注意,在使用并行化计算时,需要确保数据量足够大以使得并行化计算有意义。
阅读全文