C ++ продолжить против перерыва - PullRequest
13 голосов
/ 16 июня 2011

Какой оператор будет выполнен после "continue" или "break"?

for(int i = 0; i < count; ++i)
 {
     // statement1                                                                                                                                                                                                                          
     for(int j = 0; j < count; ++j)
     {
         //statement2                                                                                                                                                                                                                       
         if(someTest)
             continue;
     }
     //statement3                                                                                                                                                                                                                           
 }

for(int i = 0; i < count; ++i)
 {   
     // statement1                                                                                                                                                                                                                          
     for(int j = 0; j < count; ++j)
     {   
         //statement2                                                                                                                                                                                                                       
         if(someTest)
             break;
     }
     //statement3                                                                                                                                                                                                                           
 }

Ответы [ 6 ]

22 голосов
/ 16 июня 2011

продолжить: ++j, а затем, если j < count, то statement2 в противном случае statement3

перерыв: statement3

20 голосов
/ 16 июня 2011

Continue переходит прямо к вершине самого внутреннего цикла, где будут выполняться код итерации и проверка непрерывности (разделы 3 и 2 цикла for).

Брейк прыгает сразу после самого внутреннего цикла, ничего не меняя.

Может быть проще подумать о том, как первый прыгает на закрывающую скобку самого внутреннего цикла, в то время как последний прыгает сразу за ней.

10 голосов
/ 16 июня 2011

continue заканчивает текущую итерацию, фактически она такая же, как:

for(int i = 0; i < count; ++i)
 {
     // statement1                                                                                                                                                                                                                          
     for(int j = 0; j < count; ++j)
     {
         //statement2                                                                                                                                                                                                                       
         if(someTest)
             goto end_of_loop;
end_of_loop:
     }
     //statement3                                                                                                                                                                                                                           
 }

break выходит из цикла:

for(int i = 0; i < count; ++i)
 {   
     // statement1                                                                                                                                                                                                                          
     for(int j = 0; j < count; ++j)
     {   
         //statement2                                                                                                                                                                                                                       
         if(someTest)
             goto after_loop;
     }
after_loop:
     //statement3                                                                                                                                                                                                                           
 }
2 голосов
/ 16 июня 2011

оператор2 будет выполняться после продолжения, учитывая, что цикл не был в последней итерации.

Statement3 будет выполняться после перерыва.

'continue' (как следует из названия) продолжает цикл, пропуская остальные операторы в текущей итерации.

'break' разрывается и выходит из цикла.

2 голосов
/ 16 июня 2011

Continue: зависит.Оператор continue выполнит часть цикла приращения, затем часть теста, а затем решит, выполнять следующую итерацию или выйти из цикла.Так что это может быть утверждение 2 или 3.

Break: утверждение 3.

Кстати, это домашняя работа?

0 голосов
/ 16 июня 2011
  1. Для продолжения внутренняя петля выполняется с новыми значениями i, j i, j + 1

  2. Для прерывания внутренняя петля выполняется с новыми i, jзначения i + 1,0

курса, если выполнены граничные условия

...