Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在while循环中嵌套while循环和在while循环中嵌套if-else循环之间有什么显著区别吗?(C+;+;)_C++_Loops_Performance - Fatal编程技术网

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
    

  • 另一件事是,“while”循环至少需要两次比较:在第一次迭代时输入,在第二次迭代时不输入

  • break
    来自内部循环的语句将不允许您退出外部循环。因此,您将错过
    break
    /
    continue
    语句引入的一些有用功能。比较:

    while(some_loop_cont_val) {
        if(some_det) {
            break;
        }
    }
    //"break" takes you here
    

  • 另一件事是,“while”循环至少需要两次比较:在第一次迭代时输入,在第二次迭代时不输入


  • 效率和偏好都是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
    }