2017-12-06 8 views
1

누군가가 for와 if를 사용하는이 구문을 설명 할 수 있습니까?for 루프와 if 문을 나란히 사용 C++

int min_dist = huge; 
int v = -1; 

for (int i = 0; i < N; ++i) if (!done[i]) { 
    if (d[i] >= min_dist) continue; 
    min_dist = d[i]; 
    v = i; 
} 
+2

'나란히'는 무엇을 의미합니까? – NiVeR

+4

이것은 for 문 안에있는 if 문입니다. 정확히 무엇을 얻지 못하니? "if"앞에 줄 바꿈을 넣으면 똑같이되지만 더 읽기 쉽습니다. 원한다면 중괄호를 추가하십시오. –

+1

그 다음 라인에 있어야 할 필요가없는 경우, 대부분의 경우 당신이 넣는 공백 (새 라인 포함)은 당신에게 달려 있습니다. – Borgleader

답변

2

들여 쓰기가 어렵고 체계적인 코드의 경우입니다. for 라인이 쉽게 읽을 수있게 직후

for (int i = 0; i < N; ++i) 
{ 
    if (!done[i]) 
    { 
    if (d[i] >= min_dist) continue; 
    min_dist = d[i]; 
    v = i; 
    } 
} 

이 블록 {} 추가 : 동일합니다.

두 번째 if 문에 다른 블록을 추가하여 더 쉽게 만들 수 있습니다.

for (int i = 0; i < N; ++i) 
{ 
    if (!done[i]) 
    { 
    if (d[i] >= min_dist) 
    { 
     continue; 
    } 

    min_dist = d[i]; 
    v = i; 
    } 
} 

당신은 그것으로 단순화 할 수 있습니다 :

for (int i = 0; i < N; ++i) 
{ 
    if (!done[i]) 
    { 
    if (d[i] < min_dist) 
    { 
     min_dist = d[i]; 
     v = i; 
    } 
    } 
} 

if의 여전히 간단하게 결합 될 수있다.

for (int i = 0; i < N; ++i) 
{ 
    if (!done[i] && d[i] < min_dist) 
    { 
    min_dist = d[i]; 
    v = i; 
    } 
} 
0

괄호가없는 루프를 사용하려는 경우 단일 블록 문을 실행하는 데 사용할 수 있습니다. 이 경우 if 문은 다른 모든 문을 한 쌍의 괄호 안에 그룹화하여 단일 블록으로 만듭니다.

2

이 정확히 동일합니다 설명으로

int min_dist = huge; 
int v = -1; 

for (int i = 0; i < N; ++i){ 
    if (!done[i]) { 
     if (d[i] >= min_dist) continue; 
     min_dist = d[i]; 
     v = i; 
    } 
} 

, 당신은 단지 또는, ​​당신은 괄호가 필요하지 않는 경우 내부에 하나 개의 문장이있을 때.

+0

* 필요하지 않습니다 *; 아니. 하지만 C++ 문법의 세부 사항에 익숙하지 않은 친숙한 사람 일지 모를 코드의 캐주얼 독자에게 매우 도움이되므로 여전히 이모티콘을 사용해야합니다. 컴파일러가 아닌 독자를위한 코드를 작성하십시오 (컴파일러가 유효하면 독자적으로 알아낼 것입니다). –

+0

@JesperJuhl 저는 여러분에게 동의합니다. 대괄호는 실제로 범위를 구분하지만 좋은 점은 다른 코드를 접할 수있는 것처럼 항상 필요한 것은 아니라는 것입니다. –

2

레이아웃이 너를 속일 수 있습니다. 그것은 하나의 경우 문을 가진 단지에 대한 루프의 : 색인 각 항목에 대한

  • 내가
  • 항목 난, 아직 수행하지 다음의 항목 난을 사전 처리하는 경우 경우 몸
  • 다른
  • 다음 항목 (for-loop)
7

나란히 있습니다. for 안에 if입니다. for의 구문은

for(...) 
    statement 

입니다 그리고 단지 그래서 if도 문입니다 발생합니다. 그래서 코드는 다음과 동일합니다 : 화이트 공간이 거의 컴파일 과정에서 무시됩니다

for(...) 
    if() { 
    } 

때문입니다. 새로운 라인이 있는지 여부는 중요하지 않습니다. 그것은 여전히 ​​성명서입니다. 는 한 줄

if (d[i] >= min_dist) continue; 

문제가되지 않는 것처럼 우리가 그 분명히 중요한 중괄호를 생략하지 않는 경우 그리고 :

for(...) { 
    if() { 
    } 
} 

우리는 훨씬 덜 수있을 것를에 혼동 미래.

+0

그리고 (내가 OP와 관련 있다고 생각하는); 한 줄에 for (...) if (...)와 동일합니다. –

1

코드를 보는 것은 내가이 경우, 가장 좋은 방법은 내가 읽기 쉽게 찾을 수있는 형식을 다시 작성하는 것입니다 이해하지 않을 때 나는 항상 찾을 :

for (int i = 0; i < N; ++i) { 
    if (!done[i]) { 
     if (d[i] >= min_dist) { 
      continue; 
     } 
     min_dist = d[i]; 
     v = i; 
    } 
} 

사실 if 문이 루프 옆에있는 것은 루프 본문으로 해석 될 표현식이라는 것을 의미합니다 (항상이 경우에만 블록 {}도 사용됩니다). 이 if은 몸체도 가지고 있습니다. 생략 된 블록을 명시 적으로 넣으면 어떤 일이 일어나는지 더 쉽게 알 수 있습니다.

0

이 코드를 작성하는 올바른 방법이 같은 경우 : for 그냥 일을 혼란으로

for (int i 0; i < N; ++i) 
    if (!done[i] && d[i] < min_dist) { 
     min_dist = d[i]; 
     v = i; 
    } 

는 같은 줄에 if 퍼팅. 마찬가지로 두 개의 문 대신에 if 문이 있습니다.

+0

추가 명확성을 위해; for 루프에도 중괄호를 추가하십시오. –

+0

@JesperJuhl - 혼란을 피하기 위해 for 루프에도 중괄호를 추가하십시오. 진지하게 : 이것은 개인 스타일 문제의 더 많은 것입니다. 내 코드에서는 중복 중괄호를 추가하지 않습니다. –

+0

스타일 문제라고 동의합니다. 그러나 내 개인적인 경험은 당신이 항상 중괄호를 추가하면 초보자가 혼란을 덜 받게된다는 것입니다. 나는 익숙하지 않은 코드가 그렇게 쉽게 읽는 것을 발견했다. 그래서 (개인적으로) 필자는 * 항상 * 중괄호를 추가해야한다고 생각합니다. 그러나; 맛의 문제 야. –