【问题标题】:Calculating averages of a vector with increasing size计算大小增加的向量的平均值
【发布时间】:2016-12-17 02:32:23
【问题描述】:

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

我做了一个函数来计算所有帧的当前渲染速度平均值,它使用一个 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&lt;double&gt; &amp;input_vector)——这段代码每次都复制整个向量。哦。
  • 另外,使用operator[] 代替at。或者直接使用std::accumulate。顺便说一句,这可以在 C++17 中自动并行化。 (也可以使用 libstdc++,但这不是您使用的。)
  • 感谢两位的提示。以后我一定会记住的!

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    相关资源
    最近更新 更多