2016-12-17 49 views
0

我有一个每秒运行数百次的渲染函数,它告诉我每帧需要多少毫秒来绘制。计算大小递增的矢量的平均值

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

通过引用传递向量而不是值:'double average(std :: vector &input_vector)' - 此代码每次都会制作整个向量的副本。 Oy公司。 –

+1

另外,使用'operator []'而不是'at'。或者直接使用'std :: accumulate'。这可以在C++ 17 btw中自动并行化。 (还有libstdC++,但这不是你正在使用的。) –

+0

谢谢你的提示。我将来一定会记住他们! – 0x22fe

回答

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需要。