迭代一次和迭代两次之间的性能差异?

ran*_*dom 5 iteration performance loops

考虑类似......

for (int i = 0; i < test.size(); ++i) {
        test[i].foo();
        test[i].bar();
}
Run Code Online (Sandbox Code Playgroud)

现在考虑..

for (int i = 0; i < test.size(); ++i) {
        test[i].foo();
}
for (int i = 0; i < test.size(); ++i) {
        test[i].bar();
}
Run Code Online (Sandbox Code Playgroud)

这两者之间的时间差异很大吗?即实际迭代的成本是多少?看起来你重复的唯一真正的操作是增量和比较(尽管我认为这对于非常大的n来说会变得很重要).我错过了什么吗?

Nic*_*ver 0

对于您的示例,您还需要额外关注成本有多高.size(),因为它是针对大多数语言中的每次i增量进行比较的。

有多贵?好吧,这取决于情况,这当然都是相对的。如果.foo().bar()都很昂贵,那么相比之下,实际迭代的成本可能微不足道。如果它们非常轻量级,那么它将占您执行时间的较大比例。如果您想了解特定案例测试,这是确定您的特定场景的唯一方法。

就我个人而言,我肯定会选择单次迭代来降低成本(除非您需要在调用.foo()之前进行调用.bar())。