Im пытается вернуть QVector из функции, которая должна вычислять скользящую среднюю. Мой вопрос заключается в том, как сделать функцию более эффективной. Математика в порядке, я больше задаюсь вопросом, не сделаю ли я что-то неправильно в возвращении 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 выполняет copy-on-write). Если код слишком медленный для вас, используйте профилировщик для определения медленных линий. –
@juanchopanza QVector, поскольку большинство объектов Qt немного особенны и не ведут себя как ценность, поэтому я думаю, что это не дубликат. – pmr
@PavelStrakhov Я сделал профилирование. Возвращение кажется самой медленной частью. – user2058490