C++ 在while循环中嵌套while循环和在while循环中嵌套if-else循环之间有什么显著区别吗?(C+;+;)
编辑:我忘了添加第二个代码的循环部分 看看这两种代码样式C++ 在while循环中嵌套while循环和在while循环中嵌套if-else循环之间有什么显著区别吗?(C+;+;),c++,loops,performance,C++,Loops,Performance,编辑:我忘了添加第二个代码的循环部分 看看这两种代码样式 while(some_loop_cont_val) { while(pre_x is not done) { //do action pre_x } //do action x } 及 第一个循环执行pre_x(可能是一个迭代操作),然后x,第二个循环执行pre_x的一部分,如果没有完成,则继续执行直到完成,然后执行x。所以两者都是先做x,然后做x 我想知道这两者之间是否存在任何差异,无论
while(some_loop_cont_val)
{
while(pre_x is not done)
{
//do action pre_x
}
//do action x
}
及
第一个循环执行pre_x(可能是一个迭代操作),然后x,第二个循环执行pre_x的一部分,如果没有完成,则继续执行直到完成,然后执行x。所以两者都是先做x,然后做x
我想知道这两者之间是否存在任何差异,无论是从效率角度还是从其他方面(即:是否存在一些很少出现的细微影响,&c),或者是否有任何理由在特定情况下使用其中一种来代替另一种,或者这只是一个偏好问题。在第一个示例中,第二个while循环实际上可能是循环的
第二个示例有条件地提交两个不同的操作。在第一个示例中,第二个while循环实际上可能会循环
第二个示例有条件地提交两个不同的操作。请,请不要担心这些操作的效率
操作
代码必须是几乎没有,您才能注意到差异
如果它几乎什么都不是,和评测显示程序计数器在该循环中花费了超过10%的时间,那么担心它的效率。然后你可以展开循环或做其他聪明的事情,如果你喜欢。请,请不要担心这些事情的效率
操作
代码必须是几乎没有,您才能注意到差异
如果它几乎什么都不是,和评测显示程序计数器在该循环中花费了超过10%的时间,那么担心它的效率。然后你可以展开循环或做其他聪明的事情,如果你喜欢的话
break
来自内部循环的语句将不允许您退出外部循环。因此,您将错过break
/continue
语句引入的一些有用功能。比较:
while(some_loop_cont_val) {
if(some_det) {
break;
}
}
//"break" takes you here
及
break
来自内部循环的语句将不允许您退出外部循环。因此,您将错过break
/continue
语句引入的一些有用功能。比较:
while(some_loop_cont_val) {
if(some_det) {
break;
}
}
//"break" takes you here
及
效率和偏好都是IRellent,这两个代码片段在任何方面都是不等价的<代码>如果else不是循环构造。效率和首选项是IRELLENT,则这两个代码片段在任何方面都是不等价的
if else
不是循环构造。需要记住的重要一点是,机器代码级别它仍然是某种描述的跳转语句。您所取得的唯一成就是,在将语言功能用于它所设计的以外的东西时,会遇到维护方面的难题
在一些低级编程(驱动程序等)中,可能需要进行这种优化,但我对此表示怀疑。如果达到这个级别,那么在汇编程序中编写代码或使用宏隐藏歧义可能是更好的做法。需要记住的重要一点是,机器代码级别仍然是某种描述的跳转语句。您所取得的唯一成就是,在将语言功能用于它所设计的以外的东西时,会遇到维护方面的难题
在一些低级编程(驱动程序等)中,可能需要进行这种优化,但我对此表示怀疑。如果达到这个级别,那么在汇编程序中编写代码或使用宏隐藏歧义可能是更好的做法。如果对代码进行适当更改以使逻辑相等,使用一个循环将更有效,因为cpu可以更好地预测分支(一个循环比两个循环更容易预测-通过这种方式,您可能会有更少的错误预测)
关于分支预测的更多信息:如果您对代码进行适当的更改以使逻辑相等,那么使用一个循环将更有效,因为cpu可以更好地预测分支(一个循环比两个循环更容易预测-通过这种方式,您可能会有更少的错误预测)
关于分支预测的更多信息:如果内部循环的条件保持为true,则当外部循环的条件变为false时,第一个样式的内部循环将继续迭代 相反,当外部循环的条件变为false时,if分支不能重复执行,无论if条件是否保持true
(重复其他人说过的话:if else不是循环。就像while一样,它是一个控制结构,但它不是循环。)如果内循环的条件保持为真,当外循环的条件变为假时,第一种样式的内循环将继续迭代 相反,当外部循环的条件变为false时,if分支不能重复执行,无论if条件是否保持true
(重复其他人说过的话:if-else不是一个循环。就像while一样,它是一个控制结构,但它不是一个循环。)这两者的逻辑是绝对不同的
如果
some\u loop\u cont\u val
为真,而action pre\u x使some\u loop\u cont\u val
为假,只有您的第一个示例会执行action x这两者的逻辑是绝对不同的
如果some\u loop\u cont\u val
为真,而action pre\u x使some\u loop\u cont\u val
为假,则只有您的第一个示例将执行ac
while(some_loop_cont_val){
while(some_det) {
break;
}
//"break" takes you here
}