【发布时间】:2014-01-26 17:04:42
【问题描述】:
我试图从一个应该计算移动平均值的函数中返回一个 QVector。我的问题是如何使功能更有效。数学很好,我更想知道我在返回 QVector 时是否做错了什么。这是我到目前为止的代码:
QVector<double> moving_exponential_average(const QVector<double>& a, double lambda) {
if(lambda <0 ) {
lambda = 0;
}
if(lambda >1) {
lambda = 1;
}
QVector<double> b;
b.reserve(a.size());
b.append(a[0]);
double l_inv = 1-lambda;
for(unsigned int i = 1; i < a.size(); ++i) {
b.append(a[i]*lambda+l_inv*b[i-1]);
}
return b;
}
我使用默认构造函数来防止 QVector 设置默认值。 我尝试了同样的事情,调整大小要慢得多。 您对如何优化有什么建议吗?
问候
【问题讨论】:
-
您的代码没有明显的慢(因为 QVector 执行写时复制)。如果代码对您来说太慢,请使用分析器来确定慢行。
-
@juanchopanza QVector,因为大多数 Qt 对象都有点特殊,不表现为值,所以我认为这不是重复的。
-
@PavelStrakhov 我做了分析。返回似乎是最慢的部分
-
添加一些你如何调用函数的上下文。也许就地修改原始向量是一种选择?
-
好的,所以它比什么慢?你一定有其他的理想可以与之比较。
标签: c++ qt optimization qvector