读书人

关于for循环的有关问题

发布时间: 2012-05-01 12:48:58 作者: rapoo

关于for循环的问题
if(condition)
{
for(i=0;i <n;i++)
{
dosomething();
}
}
else
{
for(i=0;i <n;i++)
{
dootherthing();
}
}

for(i=0;i <n;i++)
{
if(condition)
dosomething();
else
dootherthing();
}
各有什么优缺点?

[解决办法]
第一个判断少,同等情况下(n相等)执行耗时少,但是只判断一次没那么灵活,如果中途标志改了,不会动态的跟着变化;
第二个更耗时,但是更灵活,实时性好
[解决办法]
如果condition不会随着循环而发生改变,则前一个代码有更高效率。因为它只需要对condition进行一次判断。

如果condition在循环时会发生改变,则只能选择第二个代码。
[解决办法]
前者代码冗余度高,但只需要 一次判断.

后者代码冗余度低,但每次循环都需要判断,因为分支预测,速度略低.

但,在足够智能的编译器上,这两者会被优化成完全一样的代码.
此时,速度上没区别.

另:这里的假设是:condition不会随着dosomething和dootherthing发生改变
[解决办法]
第一段代码的可读性强点,而且代码执行效率高,但是冗余大
第二段代码可读性差,而且容易出错!

个人觉得如果代码不长的话,可以采用第一种,条理清晰点!

读书人网 >C++

热点推荐