【发布时间】:2015-03-13 18:53:13
【问题描述】:
例如,我想打印矢量的内容。什么会执行得更快,“传统的 for”循环(1)还是 C++11 循环(2)?还是根本没有速度差异?任何信息表示赞赏。
1)
for (int i=0;i<FooBar_vector.size();i++)
{
cout<<FooBar_vector[i]<<endl;
}
2)
for (auto &val : FooBar_vector)
{
cout<< val <<endl;
}
【问题讨论】:
-
您可以对其进行基准测试并查看...但老实说,如果您使用优化进行编译,它们应该是相同的。如果有差异(这会让我感到惊讶),我认为这不会很明显,因为打印文本和刷新流将花费绝大多数时间,我预计。
-
一个值得注意的快速事情是您可以将
endl更改为“\n”。然后在循环之后,调用cout.flush() -
我对这个问题做了-1,因为“哪个更快...... X 或 Y”是一个基本上不应该在 SO 上问的问题。你应该做的是自己分析代码。
-
如果您的优化器不烂,请使用基于范围的。如果确实很糟糕,请使用指针算术。无论哪种方式,循环本身都不会是小偷,输出会。
-
相比之下,@JohnDibling“为什么这段代码更快”是一个更好的问题(假设明确提到了优化标志/编译器/硬件、可重现的示例等)
标签: c++ performance c++11 for-loop cycle