У меня есть функция рендеринга, которая выполняется сотни раз в секунду, и она сообщает мне, сколько миллисекунд каждый кадр принимает для рисования.Расчет средних значений вектора с увеличением размера
Я сделал функцию для вычисления текущей средней скорости рендеринга всех кадров, которая использует std :: vector для хранения всех предыдущих кадров.
Однако каждый раз, когда я запускаю свою программу, вектор, который хранит средние значения, становится огромным и занимает все большее количество памяти, а также замедляет мою программу почти в 10 раз (скорость вытягивания).
функция Усреднение (обратите внимание, я C++ для начинающих):
double average(std::vector<double> input_vector)
{
double total = 0;
for(unsigned int i = 0; i < input_vector.size(); i++)
{
total += input_vector.at(i);
}
return (total/(double)input_vector.size());
}
Может кто-то помочь мне исправить это?
Спасибо
Передайте вектор по ссылке, а не по значению: 'double average (std :: vector & input_vector)' - этот код делает копию всего вектора каждый раз. Oy. –
Кроме того, используйте 'operator []' вместо 'at'. Или просто используйте 'std :: accumulate' напрямую. Это можно распараллелить автоматически в C++ 17 бит. (Также с libstdC++, но это не то, что вы используете.) –
Спасибо вам за советы. Я обязательно буду помнить их в будущем! – 0x22fe