MST

星途 面试题库

面试题:C++中结合自定义策略的transform链式操作优化

假设有一个非常大的 `std::vector<double>` 名为 `data`,并且有一个复杂的计算函数 `double complexCalculation(double num)`,此函数涉及多次三角函数运算和对数运算。现在要对 `data` 中的每个元素应用 `complexCalculation` 函数,然后将结果进行标准化(减去所有结果的平均值,再除以所有结果的标准差)。请使用 `std::transform` 的链式操作高效地完成此任务。要求考虑性能优化,例如并行计算等,并编写完整的C++代码实现,包括必要的头文件和函数定义。
32.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <vector>
#include <numeric>
#include <cmath>
#include <algorithm>
#include <execution>

// 复杂计算函数
double complexCalculation(double num) {
    return std::sin(num) + std::cos(num) + std::log(num);
}

int main() {
    std::vector<double> data = {1.0, 2.0, 3.0, 4.0, 5.0};

    // 对data中的每个元素应用complexCalculation
    std::vector<double> results(data.size());
    std::transform(std::execution::par, data.begin(), data.end(), results.begin(), complexCalculation);

    // 计算平均值
    double sum = std::accumulate(results.begin(), results.end(), 0.0);
    double mean = sum / results.size();

    // 计算标准差
    double squaredDiffSum = 0.0;
    std::for_each(std::execution::par, results.begin(), results.end(), [&](double num) {
        squaredDiffSum += std::pow(num - mean, 2);
    });
    double stdDev = std::sqrt(squaredDiffSum / results.size());

    // 标准化结果
    std::transform(std::execution::par, results.begin(), results.end(), results.begin(), [&](double num) {
        return (num - mean) / stdDev;
    });

    // 输出结果
    for (double result : results) {
        std::cout << result << " ";
    }
    std::cout << std::endl;

    return 0;
}