保存所有简单的计算或每次需要结果时执行它们?

时间:2016-08-05 12:16:31

标签: c++ performance

所以我正在进行长时间的模拟,基本上是在C ++中。我有几个类,有很多成员和几个需要完成和重做的操作。有很多简单的任务需要多次完成 对于大型计算,我已经计算过一次并将其保存为成员。但是对于像其他成员的加法和减法这样的简单计算,计算成员数组的规范等,我很困惑,如果保存它们也是明智的决定,以提高性能。
对于这些简单的任务,只需计算每次所需的时间或将计算结果保存为新成员并在需要时进行检索就更快。

我有很多这些简单的重复计算,所以这可以使代码真的很乏味,为所有人设置getter,setter。

1 个答案:

答案 0 :(得分:1)

记忆不是那么单调乏味。你可以像这样轻松搞定:

template <class OUT,class IN>
OUT calc(const IN& x){

    // (small) overhead for memoization
    static std::map<IN,OUT> memo;
    std::map<IN,OUT>::iterator found = memo.find(x);
    if (found != memo.end()){ return found->second; }

    // (possibly expensive) calculation 
    double result = doTheCalculation(x);   // the actual calculation
    memo[x] = result;
    return result;

}

当您以巧妙的方式执行此操作时,您甚至不必为要使用它的每个函数编写备忘录代码,而只需将其重用于多个函数。是否值得完全取决于您的应用程序,找到的唯一方法是测量它。

请注意,使用map重新使用unordered_map可能会提高效率。