在Qt中如何计算QList中数据的平均值,并且去除掉无效值,用宏的方式写出来
时间: 2024-05-12 14:16:21 浏览: 110
求平均数的代码
您好,关于您的问题,我很乐意帮您解答。下面是用宏的方式计算QList中数据的平均值并去除无效值的代码:
```
#define AVERAGE(QList, Type, InvalidValue) \
({ \
Type sum = (Type)0; \
int count = 0; \
for (int i = 0; i < QList.size(); i++) \
{ \
Type currentValue = QList.at(i); \
if (currentValue != InvalidValue) \
{ \
sum += currentValue; \
count++; \
} \
} \
count > 0 ? sum / count : InvalidValue; \
})
```
代码中,我们定义了一个宏 AVERAGE,该宏可以接收三个参数。第一个参数 QList 表示需要计算平均值的QList,第二个参数 Type 表示QList中存储的数据类型,第三个参数 InvalidValue 表示无效值。其中,我们使用了一个类似于 C 语言中的语法 ({ }),这个语法可以用来表示一个代码块。在代码块中,我们先定义了一个变量 sum 并初始化为 0,用于累加QList中有效数据的和。然后定义了一个变量 count 来统计有效数据的数量。接着,我们使用一个逐一遍历QList中所有数据的循环,并对每个数据进行判断是否为无效值。如果数据有效,则将其加入到 sum 变量中,并增加 count 变量的值。最后,我们根据有效数据的数量计算平均值,并返回结果。
在使用该宏时,只需将 QList、Type 和 InvalidValue 替换为实际的参数即可。比如:
```
QList<int> dataList = {3, 4, 5, 6, -1, 7, 8, -1, 9};
int avg = AVERAGE(dataList, int, -1);
```
以上代码中,我们创建了一个包含一些有效数据和一些无效数据的QList,然后调用 AVERAGE 宏计算了该 QList 中有效数据的平均值,并将结果保存到 avg 变量中。由于无效值是 -1,因此计算结果应该为 (3+4+5+6+7+8+9) / 7 = 5。
阅读全文