首页 > 解决方案 > 计算 POD 结构向量中所有数据成员的平均值

问题描述

我有一个提供 3 种不同读数的传感器。我想读取传感器 X 次,然后获取所有读数的平均值:

#define NUM_DATA ((int)1000);

struct Data {
    int x;
    int y;
    int z;
}

Data getAverageData() {
    
    static std::vector<Data> vecData(NUM_DATA); // Vector for sensor data
    vecData.clear();
    
    for(int i = 0; i < NUM_DATA; i++) {
        int x = sensorGetX(); // from sensor
        int y = sensorGetY(); // from sensor
        int z = sensorGetZ(); // from sensor
        
        vecData[i] = {x, y, z};
    }
        
    // I am stuck here!!!
    Data average = std::accumulate(vecData.begin(), vecData.end(), 0.0,
                                     [&](int sum, Data d) {
            return sum + d.x;
        });    

    return average;
}

Data结构既用于将数据保存在向量中,也用于平均值本身。我想保持这种状态。我当然知道要以老式的方式来做,但我希望我的代码看起来很聪明,并且我想使用 c++11 或 c++17 必须提供的最新功能。

标签: c++c++17stdstdvector

解决方案


constexpr unsigned int num_data = 1000;

struct Data {
    int x;
    int y;
    int z;
}

Data getAverageData() {
    
    Data vecData_temp = {0, 0, 0};

    for(size_t i = 0; i < num_data; ++i) {
        vecData_temp.x += sensorGetX();
        vecData_temp.y += sensorGetY();
        vecData_temp.z += sensorGetZ();
    }

    vecData_temp.x /= num_data;
    vecData_temp.y /= num_data;
    vecData_temp.z /= num_data; 

    return vecData_temp;
}

在这种情况下,我看不到创建向量的意义。尝试了这个轻量级代码,只创建了一个局部变量。


推荐阅读