2016-12-17 84 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需要。