zoukankan      html  css  js  c++  java
  • 【转】c++如何跳出多层循环

    我们知道c语言的break语句只能跳出离它最近的一层循环,可是有时候我们需要跳出多层循环 那可怎么办呢?

    比如一个二重循环  在最内层如果某条件成立 我们就可以完成需要的动作  然后退出全部循环,该怎么做呢?

    scrn20151004121955

    下面提供了几种跳出多重循环的方法 并不局限于上面的二重循环 例子只是为了提供思路

    1. 使用goto

    虽然大多数教材和人都建议少使用goto语句,但是goto还是有它存在的道理,比如可以快速跳出多重循环。雅乐网认为在这种情况下goto是最佳的选择。

    评分:★★★★★

    2. 写成函数 return

     1 void nestedfor(void)
     2 {
     3       for (condition1)
     4      {
     5           for (condition2)
     6           {
     7               for (condition3)
     8                {
     9                    if (condition)
    10                   {
    11                       symbol = 1;
    12                       return;
    13                    }
    14                 }
    15             }
    16       }
    17 }

    评分:★★★★

    缺点:循环嵌套很多的时候很麻烦,函数参数传递也很麻烦

    3. 直接修改外层循环条件

     1 for (i = 0; i < MAX1; i++)
     2 {
     3     for (j = 0; j < MAX2; j++)
     4     {
     5         if (condition1)
     6         {
     7             symbol = 1;
     8             i = INT_MAX;
     9             break;
    10         }
    11     }
    12 }

    评分:★★★★

    缺点:修改了循环控制变量

    4. 在外层循环设置判断条件

    内层循环判断满足条件修改标志后 外层循环进行判断

    评分:★★★

    缺点:书写较为麻烦  未满足条件的时候有多余的判断

    5. 在大循环后面判断标志加入break

     1 for (condition1)
     2 {
     3     for (condition2)
     4     {
     5         for (condition3)
     6         {
     7             if (condition)
     8             {
     9                 symbol = 1;
    10                 break11             }
    12         }
    13         if (symbol == 1)
    14             break;
    15     }
    16     if (symbol == 1)
    17         break;
    18 }

    评分:★★★

    缺点:同2

    版权声明:

    本文由  原创,商业转载请联系作者获得授权。 
    非商业转载请注明作者  或 雅乐网 ,并附带本文链接:
    http://www.yalewoo.com/how_to_skip_nested_loop.html

  • 相关阅读:
    417 Pacific Atlantic Water Flow 太平洋大西洋水流
    416 Partition Equal Subset Sum 分割相同子集和
    415 Add Strings 字符串相加
    414 Third Maximum Number 第三大的数
    413 Arithmetic Slices 等差数列划分
    412 Fizz Buzz
    410 Split Array Largest Sum 分割数组的最大值
    409 Longest Palindrome 最长回文串
    day22 collection 模块 (顺便对比queue也学习了一下队列)
    day21 计算器作业
  • 原文地址:https://www.cnblogs.com/dapeng-bupt/p/8622787.html
Copyright © 2011-2022 走看看