C++ 计算大小不断增加的向量的平均值

C++ 计算大小不断增加的向量的平均值,c++,visual-studio,c++11,C++,Visual Studio,C++11,我有一个每秒运行数百次的渲染函数,它告诉我每个帧需要多少毫秒来绘制 我制作了一个函数来计算所有帧的当前渲染速度平均值,它使用std::vector来保存所有之前的帧 但是,每次我运行程序时,存储平均值的向量都会变得巨大,占用越来越多的内存,同时会将程序速度降低近10倍(绘图速度) 平均函数(请注意我是C++初学者): 双平均(标准::矢量输入\u矢量) { 双倍合计=0; for(无符号整数i=0;i

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

我制作了一个函数来计算所有帧的当前渲染速度平均值,它使用std::vector来保存所有之前的帧

但是,每次我运行程序时,存储平均值的向量都会变得巨大,占用越来越多的内存,同时会将程序速度降低近10倍(绘图速度)

平均函数(请注意我是C++初学者):

双平均(标准::矢量输入\u矢量)
{
双倍合计=0;
for(无符号整数i=0;i
有人能帮我修一下吗


谢谢

鉴于算术平均值的定义是
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;
}

根本不需要向量。

鉴于算术平均值的定义是
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

通过引用而不是通过值传递向量:
双平均值(std::vector&input_vector)
--此代码每次都复制整个向量。另外,使用
操作符[]
代替
处的
。或者直接使用
std::accumulate
。这可以在C++17 btw中自动并行化(也可以使用libstdc++,但这不是您正在使用的)。谢谢你们的提示。我以后一定会记住的!通过引用而不是通过值传递向量:
双平均(std::vector&input_vector)
——此代码每次都会复制整个向量。另外,使用
操作符[]
代替
处的
。或者直接使用
std::accumulate
。这可以在C++17 btw中自动并行化(也可以使用libstdc++,但这不是您正在使用的)。谢谢你们的提示。我以后一定会记住的!