Is while faster than for?
Is while faster than for?
正如我在学校学到的那样,循环for
比循环while
快,但有人告诉我循环while
更快。
我必须优化程序,我想写while
而不是for
,但我担心它会更慢?
例如,我可以更改for
循环:
for (int i=0; i<x; i++)
{
cout<<"dcfvgbh"<<endl;
}
进入while
循环:
i=0;
while (i<x)
{
cout<<"dcfvgbh"<<endl;
i++;
}
标准要求(§6.5.3/1):
for
语句
for(对于init语句条件opt;表达式option)语句
等效于{ for-init-statement while ( condition ) { statement expression; } }
因此,您不太可能看到它们之间的差异(即使执行时间不一定是标准中指定的等效性的一部分)。也列出了一些等价的例外情况(名称的作用域,如果执行continue
,则在计算条件之前执行表达式)。至少从理论上讲,在某些条件下,后者可能会对速度产生一点影响,但可能不足以引起注意或关注,除非你在循环中实际使用了continue
,否则绝对不会。
就所有意图和目的而言,for
只是编写while
的一种奇特方式,因此无论哪种方式都没有性能优势。使用其中一个而不是另一个的主要原因是如何翻译意图,以便读者更好地了解循环实际在做什么。
否
不,不是。
它并不快。
cout
将占用该循环99%的时钟周期。小心微观优化。无论如何,这两者将给出基本相同的代码。
for
循环可以更快的唯一时间是当您有已知的终止条件时,例如
for(ii = 0; ii < 24; ii++)
因为一些优化编译器将执行CCD_ 15。这意味着它们不会在每次通过环路时都进行测试;参见";只在循环内做24次(或在4个块中做6次等)会稍微高效一点。当循环内的东西非常小(例如jj += ii
;)时,这种优化使for循环比while
(通常不进行"展开")快一点。
否则——没有区别。
应@zeroth 的请求更新
来源:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.47.9346&rep=rep1&type=pdf
报价来源(我的重点):
在源代码级别展开循环涉及到循环结构(例如for、while、do-while等)循环计数,以确保它是一个计数循环,复制环路主体和对展开环路的环路计数的调整。A.也可以插入序言或尾声代码。使用这种方法,很难展开使用while和goto形成的循环语句,因为循环计数不明显。然而,除了这种方法是最简单的循环,既乏味又容易出错。
另一种选择是自动展开循环。自动的展开可以在源代码早期完成,在未优化的代码后期完成中间表示,或非常晚才优化程序的表示如果是在源代码级别完成的,那么通常只有使用for语句形成的计数循环展开。使用其他控制结构形成的展开循环这是困难的,因为循环计数不明显
据我所知,将for
循环替换为while
循环并不是一种既定的优化技术。
你的两个例子在性能上是相同的,但作为练习,你可以给它们计时,以自己确认这一点。
- "error: no matching function for call to"构造函数错误
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何在C++中从两个单独的for循环中添加两个数组
- 在Linux for Windows上编译C++代码时出错
- 调用专用模板时出错"no matching function for call to [...]"
- 为什么我的for循环不能正确获取argv
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 在基于范围的for循环中使用结构化绑定声明
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- Python中的for循环与C++有何不同
- std::memory_order for std::atomic:<T>:wait
- 在更改for循环的第三部分后,未使用for循环结果
- 在 for 循环中查找问题时遇到困难
- Is while faster than for?
- std::lower_bound slower for std::vector than std::map::find