笔试题:简述以下两个for循环的优缺点

时间:2022-05-14 20:27:38
请简述以下两个for循环的优缺点
// 第一个
for (i=0; i++;)
{
if (condition)
DoSomething();
else
DoOtherthing();
}
// 第二个

if (condition)
{
for (i=0; i++;)
DoSomething();
}
else
{
for (i=0; i++;)
DoOtherthing();
}

优点:
缺点:
优点:
缺点:

45 个解决方案

#1


真不知道

#2


逻辑上都不一样,怎么比较。

#3


请简述以下两个for循环的优缺点
// 第一个
for (i=0; i++;)
{
if (condition)
DoSomething();
else
DoOtherthing();
}
// 第二个

if (condition)
{
for (i=0; i++;)
DoSomething();
}
else
{
for (i=0; i++;)
DoOtherthing();
}

优点:代码简捷
缺点:打断循环连续性
优点:代码量大
缺点:循环连续性强

#4


干的活都不一样,哈

#5


逻辑都不一样 比什么比。。 楼主 不知道 想比什么 
看哪个代码长???

#6


杯具。楼主和我一起面试- -。这个我看了好几遍也觉得逻辑都不一样,竟然也比。

后来我就直说如果condition事先确定的话,就XXX了

#7


引用 6 楼 vincent_1011 的回复:
杯具。楼主和我一起面试- -。这个我看了好几遍也觉得逻辑都不一样,竟然也比。

后来我就直说如果condition事先确定的话,就XXX了


你们在哪儿面试啊??

#8


.....林锐的博士论文里面抄的,建议去看那篇高质量C++编程的博士论文,你就知道了,这公司很懒,可能别的题也会从里面出

#9


广州,当天过了两面了,叫我等总监,不过肚子实在饿,让我先回来

#10


以下是林锐的原文:
for (i=0; i<N; i++)
{
if (condition)
    DoSomething();
else
    DoOtherthing();
}
优点:程序简洁
缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。
if (condition)
{
for (i=0; i<N; i++)
    DoSomething();
}
else
{
    for (i=0; i<N; i++)
    DoOtherthing();
}

优点:循环的效率高
缺点:程序不简洁


#11


优点:代码简捷
缺点:打断循环连续性
优点:代码量大
缺点:循环连续性强

C_C++高质量编程里面的东西

不过这个东西跟编译器的具体实现有很大关系,不要单纯的认为就是这样

#12


晕,我就是这个答案哦,不过我想不到简洁也算答案,没写上去

#13


《高质量程序设计指南——C++/C语言》(第三版)第77页。
建议4-5:
如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断转移到循环体的外面。

#14


这个是程序的优化问题,在编译器的内部,就有这样的优化,缩短编译时间,编译原理  或者  计算理论  里面好像有讲到的 。

#15


学习了~

#16


《高质量程序设计指南——C++/C语言》
电子版的哪里有?

#17


学习了……

#18


1.效率低但程序简洁
2.效率高但程序不简洁

1的程序比2多执行了N-1次逻辑判断。并且由于前者老要进行逻辑判断,打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。如果N非常大,最好采用2的写法,可以提高效率。如果N非常小,两者效率差别并不明显,采用1的写法比较好,因为程序更加简洁。

#19


很常见的一个比较~

#20


一个是在for循环加入判断语句 使得循环不连续 增大运行时间
另一个是在判断后执行for循环 虽然没有打断循环连续 但代码增加 
如果是同样的逻辑的话 建议不在for循环中加判断

#21


引用 10 楼 tu_lq 的回复:
以下是林锐的原文:
for (i=0; i<N; i++)
{
if (condition)
    DoSomething();
else
    DoOtherthing();
}
优点:程序简洁
缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。
if (condition)
{
for (i=0; i<N;……

林锐其实是SB,他误导了多少新手。所以这道题出自他的手也不足为奇,稍微懂一点C++的人都能看的出,这两个逻辑有天壤之别!有可比性吗? 我拿一个视频算法和一个状态机谁去给我比比看?

#22


知道一点编译优化的就知道了,效率上确实是第2种高。循环中代码外提可以提高编译器对循环的流水线处理,参考编译原理界的“龙书”。

#23


其实这个就是循环内层和外层的大小的问题,C/C++编程规范里面的

#24


  见解不错  

#25


《高质量c++/c程序设计》

#26


应该是时间复杂度有关吧!,看下他们运行所需的时间,就知道区别了

#27


学习。。。

#28


受教了...

#29


《C++高质量编程》里面的例题
呵 面试的题目~

#30


可能会对性能有影响,

#31


引用 2 楼 phpjspasp 的回复:
逻辑上都不一样,怎么比较。

这个逻辑确实不一样

#32


小弟不才,这程序逻辑怎么会不一样呢?

#33


学学排列和组合就知道了

#34


只是写了伪代码,两个程序完成的功能其实是一样的

第一个,代码清析,容易理解,缺点是每一次循环里都有比较,增加了程序空间复杂度;

第二个,代码相比第一个复杂一点,但循环里没有比较,降低了空间复杂度。


自己写程序时可做一个比较,如果你确知循环的上限在较少范围内,这种差异可以忽略不计时,可选择第一种易于阅读的,但如果循环上限未知的,或是循环上限比较大的,应该选择第二种

#35


现代编译器对for循环的优化,都不需要关注它了。我想。

#36


逻辑一样的话,效率其实也差不了太远。不过更喜欢后一种。

#37


高质量程序设计指南——C++/C语言》word版本,后面的习题,主要从编译的角度来说明

#38


第一个,代码清析,容易理解,缺点是每一次循环里都有比较,增加了程序空间复杂度;

第二个,代码相比第一个复杂一点,但循环里没有比较,降低了空间复杂度。

#39


没看过林锐的书。。。觉得这个问题挺那个的。

2段代码,实现不同的功能。。能说代码简洁。。







#40


学习了 学习了

#41


感觉像是面试题

#42


面试题总是从上面挖过来!

#43


多执行了个循环?!

#44


我今天去面试也做了这个题,以前没有遇到过,我考虑到在多线程情况下,condition会变化,那么第二种就有问题了,后面我又想到,如果在DoSomething里面改变了condition变量,就是希望下次执行DoOtherthing,第二种情况逻辑也是错误的。面试官直接给0分。
面试官应该不是搞技术的,其他题目就不说了,都是很教条式的考题,看了试题就叫我回去了。伤不起哦~~

#45


我今天去面试也做了这个题,以前没有遇到过,我考虑到在多线程情况下,condition会变化,那么第二种就有问题了,后面我又想到,如果在DoSomething里面改变了condition变量,就是希望下次执行DoOtherthing,第二种情况逻辑也是错误的。面试官直接给0分。
面试官应该不是搞技术的,其他题目就不说了,都是很教条式的考题,看了试题就叫我回去了。伤不起哦~~

#1


真不知道

#2


逻辑上都不一样,怎么比较。

#3


请简述以下两个for循环的优缺点
// 第一个
for (i=0; i++;)
{
if (condition)
DoSomething();
else
DoOtherthing();
}
// 第二个

if (condition)
{
for (i=0; i++;)
DoSomething();
}
else
{
for (i=0; i++;)
DoOtherthing();
}

优点:代码简捷
缺点:打断循环连续性
优点:代码量大
缺点:循环连续性强

#4


干的活都不一样,哈

#5


逻辑都不一样 比什么比。。 楼主 不知道 想比什么 
看哪个代码长???

#6


杯具。楼主和我一起面试- -。这个我看了好几遍也觉得逻辑都不一样,竟然也比。

后来我就直说如果condition事先确定的话,就XXX了

#7


引用 6 楼 vincent_1011 的回复:
杯具。楼主和我一起面试- -。这个我看了好几遍也觉得逻辑都不一样,竟然也比。

后来我就直说如果condition事先确定的话,就XXX了


你们在哪儿面试啊??

#8


.....林锐的博士论文里面抄的,建议去看那篇高质量C++编程的博士论文,你就知道了,这公司很懒,可能别的题也会从里面出

#9


广州,当天过了两面了,叫我等总监,不过肚子实在饿,让我先回来

#10


以下是林锐的原文:
for (i=0; i<N; i++)
{
if (condition)
    DoSomething();
else
    DoOtherthing();
}
优点:程序简洁
缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。
if (condition)
{
for (i=0; i<N; i++)
    DoSomething();
}
else
{
    for (i=0; i<N; i++)
    DoOtherthing();
}

优点:循环的效率高
缺点:程序不简洁


#11


优点:代码简捷
缺点:打断循环连续性
优点:代码量大
缺点:循环连续性强

C_C++高质量编程里面的东西

不过这个东西跟编译器的具体实现有很大关系,不要单纯的认为就是这样

#12


晕,我就是这个答案哦,不过我想不到简洁也算答案,没写上去

#13


《高质量程序设计指南——C++/C语言》(第三版)第77页。
建议4-5:
如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断转移到循环体的外面。

#14


这个是程序的优化问题,在编译器的内部,就有这样的优化,缩短编译时间,编译原理  或者  计算理论  里面好像有讲到的 。

#15


学习了~

#16


《高质量程序设计指南——C++/C语言》
电子版的哪里有?

#17


学习了……

#18


1.效率低但程序简洁
2.效率高但程序不简洁

1的程序比2多执行了N-1次逻辑判断。并且由于前者老要进行逻辑判断,打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。如果N非常大,最好采用2的写法,可以提高效率。如果N非常小,两者效率差别并不明显,采用1的写法比较好,因为程序更加简洁。

#19


很常见的一个比较~

#20


一个是在for循环加入判断语句 使得循环不连续 增大运行时间
另一个是在判断后执行for循环 虽然没有打断循环连续 但代码增加 
如果是同样的逻辑的话 建议不在for循环中加判断

#21


引用 10 楼 tu_lq 的回复:
以下是林锐的原文:
for (i=0; i<N; i++)
{
if (condition)
    DoSomething();
else
    DoOtherthing();
}
优点:程序简洁
缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。
if (condition)
{
for (i=0; i<N;……

林锐其实是SB,他误导了多少新手。所以这道题出自他的手也不足为奇,稍微懂一点C++的人都能看的出,这两个逻辑有天壤之别!有可比性吗? 我拿一个视频算法和一个状态机谁去给我比比看?

#22


知道一点编译优化的就知道了,效率上确实是第2种高。循环中代码外提可以提高编译器对循环的流水线处理,参考编译原理界的“龙书”。

#23


其实这个就是循环内层和外层的大小的问题,C/C++编程规范里面的

#24


  见解不错  

#25


《高质量c++/c程序设计》

#26


应该是时间复杂度有关吧!,看下他们运行所需的时间,就知道区别了

#27


学习。。。

#28


受教了...

#29


《C++高质量编程》里面的例题
呵 面试的题目~

#30


可能会对性能有影响,

#31


引用 2 楼 phpjspasp 的回复:
逻辑上都不一样,怎么比较。

这个逻辑确实不一样

#32


小弟不才,这程序逻辑怎么会不一样呢?

#33


学学排列和组合就知道了

#34


只是写了伪代码,两个程序完成的功能其实是一样的

第一个,代码清析,容易理解,缺点是每一次循环里都有比较,增加了程序空间复杂度;

第二个,代码相比第一个复杂一点,但循环里没有比较,降低了空间复杂度。


自己写程序时可做一个比较,如果你确知循环的上限在较少范围内,这种差异可以忽略不计时,可选择第一种易于阅读的,但如果循环上限未知的,或是循环上限比较大的,应该选择第二种

#35


现代编译器对for循环的优化,都不需要关注它了。我想。

#36


逻辑一样的话,效率其实也差不了太远。不过更喜欢后一种。

#37


高质量程序设计指南——C++/C语言》word版本,后面的习题,主要从编译的角度来说明

#38


第一个,代码清析,容易理解,缺点是每一次循环里都有比较,增加了程序空间复杂度;

第二个,代码相比第一个复杂一点,但循环里没有比较,降低了空间复杂度。

#39


没看过林锐的书。。。觉得这个问题挺那个的。

2段代码,实现不同的功能。。能说代码简洁。。







#40


学习了 学习了

#41


感觉像是面试题

#42


面试题总是从上面挖过来!

#43


多执行了个循环?!

#44


我今天去面试也做了这个题,以前没有遇到过,我考虑到在多线程情况下,condition会变化,那么第二种就有问题了,后面我又想到,如果在DoSomething里面改变了condition变量,就是希望下次执行DoOtherthing,第二种情况逻辑也是错误的。面试官直接给0分。
面试官应该不是搞技术的,其他题目就不说了,都是很教条式的考题,看了试题就叫我回去了。伤不起哦~~

#45


我今天去面试也做了这个题,以前没有遇到过,我考虑到在多线程情况下,condition会变化,那么第二种就有问题了,后面我又想到,如果在DoSomething里面改变了condition变量,就是希望下次执行DoOtherthing,第二种情况逻辑也是错误的。面试官直接给0分。
面试官应该不是搞技术的,其他题目就不说了,都是很教条式的考题,看了试题就叫我回去了。伤不起哦~~