Могу ли я использовать break для выхода из нескольких вложенных циклов? - PullRequest
273 голосов
/ 11 августа 2009

Можно ли использовать функцию break для выхода из нескольких вложенных циклов for? Если так, как бы вы поступили? Можете ли вы также контролировать, сколько петель выходит из перерыва?

Ответы [ 17 ]

2 голосов
/ 11 августа 2009

Оператор break завершает выполнение ближайшего вмещающего оператора do, for, switch или while, в котором он появляется. Управление переходит к оператору, который следует за завершенным оператором.

из msdn .

2 голосов
/ 27 ноября 2015

Я думаю, что goto действителен в этих обстоятельствах:

Чтобы смоделировать break / continue, вам нужно:

Перерыв

for ( ;  ;  ) {
    for ( ;  ;  ) {
        /*Code here*/
        if (condition) {
            goto theEnd;
        }
    }
}
theEnd:

Продолжить

for ( ;  ; ) {
    for ( ;  ;  ) {
        /*Code here*/
        if (condition) {
            i++;
            goto multiCont;
        }
    }
    multiCont:
}
0 голосов
/ 21 октября 2017
  while (i<n) {
    bool shouldBreakOuter = false;
    for (int j=i + 1; j<n; ++j) {
      if (someCondition) {
          shouldBreakOuter = true;
      }
    }

    if (shouldBreakOuter == true)
      break;

  }
0 голосов
/ 11 августа 2009

Другие языки, такие как PHP, принимают параметр для разрыва (то есть для разрыва 2;), чтобы указать количество уровней вложенных циклов, из которых вы хотите разорвать, однако C ++ этого не делает. Вы должны будете решить это, используя логическое значение, которое вы установили в false перед циклом, установите значение true в цикле, если вы хотите разорвать, плюс условный разрыв после вложенного цикла, проверяя, было ли логическое значение установлено в true и сломаться, если да.

0 голосов
/ 30 мая 2016

Я знаю, что это старый пост. Но я бы предложил немного логичный и более простой ответ.

for(unsigned int i=0; i < 50; i++)
    {
        for(unsigned int j=0; j < conditionj; j++)
        {
            for(unsigned int k=0; k< conditionk ; k++)
            {
                // If condition is true

                j= conditionj;
               break;
            }
        }
    }
0 голосов
/ 11 августа 2009

Выход из цикла for немного странен для меня, так как семантика цикла for обычно указывает на то, что он будет выполняться определенное количество раз. Тем не менее, это не плохо во всех случаях; если вы ищете что-то в коллекции и хотите сломать ее после того, как найдете ее, это полезно. Однако вырваться из вложенных циклов в C ++ невозможно; на других языках используется помеченный перерыв. Вы можете использовать ярлык и goto, но это может вызвать у вас изжогу ночью ..? Похоже, лучший вариант.

0 голосов
/ 02 апреля 2013

Вы можете использовать try ... catch.

try {
    for(int i=0; i<10; ++i) {
        for(int j=0; j<10; ++j) {
            if(i*j == 42)
                throw 0; // this is something like "break 2"
        }
    }
}
catch(int e) {} // just do nothing
// just continue with other code

Если вам нужно разорвать несколько циклов одновременно, это все равно часто является исключением.

...