c++ - 计算 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 必须提供的最新功能。
解决方案
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;
}
在这种情况下,我看不到创建向量的意义。尝试了这个轻量级代码,只创建了一个局部变量。
推荐阅读
- git - 不要使用 git push 覆盖服务器上的特定目录
- bash - 为我的 EC2 实例运行用户数据时,我无法安装任何东西
- java - 使用 Redis 进行 Java 继承
- python - TypeError:无法克隆对象“<>”(类型
):它似乎不是 scikit-learn 估计器,因为它没有实现“get_params”方法 - python - 在 pandas 中分组以获取一列的标准并按原样获取其他列的记录
- javascript - 如何对每对之间的差异求和,然后使用 nedb 对每对的结果求和
- oauth-2.0 - 客户端在 UserInfo 端点上得到“禁止”
- c# - 如何防止在C#中输入null enter
- python - 如何在 Python 中从带有约束的 pandas DataFrame 中选择随机行
- python - 使用 for 循环时如何不发送垃圾邮件