태그 보관물: break

break

중첩 된 루프에서 벗어나는 방법? 1000; i++) {

break문을 사용하면 내부 루프 만 중단되고 일부 플래그를 사용하여 외부 루프를 중단해야합니다. 그러나 중첩 된 루프가 많으면 코드가 좋지 않습니다.

모든 루프를 끊는 다른 방법이 있습니까? (사용하지 마십시오 goto stmt.)

for(int i = 0; i < 1000; i++) {
   for(int j = 0; j < 1000; j++) {
       if(condition) {
            // both of the loops need to break and control will go to stmt2
       }
   }

}

stmt2


답변

사용하다:

if (condition) {
    i = j = 1000;
    break;
}

답변

아니요, break. 이것은 마지막으로 남아있는 유효한 사용입니다 goto.)

그렇지 않은 경우 플래그를 사용하여 깊은 중첩 루프에서 벗어날 수 있습니다.

중첩 루프에서 벗어나는 또 다른 방법은 두 루프를 분리하여 별도의 함수로 분리하고 종료하려는 경우 해당 함수에서 반환하는 것입니다.

요약-중첩 된 루프에서 벗어나려면 :

  1. 사용하다 goto
  2. 플래그 사용
  3. 루프를 별도의 함수 호출로 분해

여기에 xkcd를 포함하여 저항 할 수 없었습니다. 🙂

출처

Goto는 유해한 것으로 간주 되지만 댓글에있는 많은 사람들이 그럴 필요가 없다고 제안합니다. 신중하게 사용하면 훌륭한 도구가 될 수 있습니다. 적당히 사용하는 것은 무엇이든 재미 있습니다.


답변

bool stop = false;
for (int i = 0; (i < 1000) && !stop; i++)
{
    for (int j = 0; (j < 1000) && !stop; j++)
    {
        if (condition)
            stop = true;
    }
}

답변

한 가지 방법은 모든 중첩 루프를 함수에 넣고 모든 루프에서 벗어나야 할 경우 가장 안쪽 루프에서 반환하는 것입니다.

function()
{
  for(int i=0; i<1000; i++)
  {
   for(int j=0; j<1000;j++)
   {
      if (condition)
        return;
   }
  }
}

답변

나는 goto문제를 해결할 것이라고 생각한다

for(int i = 0; i < 1000; i++) {
    for(int j = 0; j < 1000; i++) {
        if (condition) {
            goto end;
        }
    }
}

end:
stmt2 

답변

읽을 수 있도록하려면 부울 변수가 필요합니다.

bool broke = false;
for(int i = 0; i < 1000; i++) {
  for(int j = 0; j < 1000; i++) {
    if (condition) {
      broke = true;
      break;
    }
  }
  if (broke)
    break;
}

덜 읽기 원한다면 부울 평가에 참여할 수 있습니다.

bool broke = false;
for(int i = 0; i < 1000 && !broke; i++) {
  for(int j = 0; j < 1000; i++) {
    if (condition) {
      broke = true;
      break;
    }
  }
}

궁극적 인 방법으로 초기 루프를 무효화 할 수 있습니다.

for(int i = 0; i < size; i++) {
  for(int j = 0; j < 1000; i++) {
    if (condition) {
      i = size;
      break;
    }
  }
}

답변

LLVM 팀의 현명한 조언을 사용하십시오.

“술어 루프를 술어 함수로 전환”

보다:

http://llvm.org/docs/CodingStandards.html#turn-predicate-loops-into-predicate-functions