计算随着大小增加的向量的平均值

时间:2016-12-17 02:32:24

标签: c++ visual-studio c++11

我有一个每秒运行数百次的渲染函数,它告诉我每帧绘制多少毫秒。

我做了一个函数来计算所有帧的当前渲染速度平均值,它使用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());
}

有人可以帮我解决这个问题吗?

谢谢

1 个答案:

答案 0 :(得分:3)

鉴于算术平均值的定义为sum( n ) / count( n ),您不需要存储n的每个值以重新计算运行平均值,您只需要当前sum和当前的count一样:

double runningMean(double newValue) {
    static double sum = 0;
    static double count = 0;

    count++;
    sum += newValue;

    return sum / count;
}

根本不需要vector