누군가가 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;
}
누군가가 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;
}
들여 쓰기가 어렵고 체계적인 코드의 경우입니다. 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;
}
}
괄호가없는 루프를 사용하려는 경우 단일 블록 문을 실행하는 데 사용할 수 있습니다. 이 경우 if
문은 다른 모든 문을 한 쌍의 괄호 안에 그룹화하여 단일 블록으로 만듭니다.
이 정확히 동일합니다 설명으로
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;
}
}
, 당신은 단지 또는, 당신은 괄호가 필요하지 않는 경우 내부에 하나 개의 문장이있을 때.
* 필요하지 않습니다 *; 아니. 하지만 C++ 문법의 세부 사항에 익숙하지 않은 친숙한 사람 일지 모를 코드의 캐주얼 독자에게 매우 도움이되므로 여전히 이모티콘을 사용해야합니다. 컴파일러가 아닌 독자를위한 코드를 작성하십시오 (컴파일러가 유효하면 독자적으로 알아낼 것입니다). –
@JesperJuhl 저는 여러분에게 동의합니다. 대괄호는 실제로 범위를 구분하지만 좋은 점은 다른 코드를 접할 수있는 것처럼 항상 필요한 것은 아니라는 것입니다. –
레이아웃이 너를 속일 수 있습니다. 그것은 하나의 경우 문을 가진 단지에 대한 루프의 : 색인 각 항목에 대한
나란히 있습니다. for
안에 if
입니다. for
의 구문은
for(...)
statement
입니다 그리고 단지 그래서 if
도 문입니다 발생합니다. 그래서 코드는 다음과 동일합니다 : 화이트 공간이 거의 컴파일 과정에서 무시됩니다
for(...)
if() {
}
때문입니다. 새로운 라인이 있는지 여부는 중요하지 않습니다. 그것은 여전히 성명서입니다. 는 한 줄
if (d[i] >= min_dist) continue;
문제가되지 않는 것처럼 우리가 그 분명히 중요한 중괄호를 생략하지 않는 경우 그리고 :
for(...) {
if() {
}
}
우리는 훨씬 덜 수있을 것를에 혼동 미래.
그리고 (내가 OP와 관련 있다고 생각하는); 한 줄에 for (...) if (...)와 동일합니다. –
코드를 보는 것은 내가이 경우, 가장 좋은 방법은 내가 읽기 쉽게 찾을 수있는 형식을 다시 작성하는 것입니다 이해하지 않을 때 나는 항상 찾을 :
for (int i = 0; i < N; ++i) {
if (!done[i]) {
if (d[i] >= min_dist) {
continue;
}
min_dist = d[i];
v = i;
}
}
사실 if
문이 루프 옆에있는 것은 루프 본문으로 해석 될 표현식이라는 것을 의미합니다 (항상이 경우에만 블록 {}
도 사용됩니다). 이 if
은 몸체도 가지고 있습니다. 생략 된 블록을 명시 적으로 넣으면 어떤 일이 일어나는지 더 쉽게 알 수 있습니다.
이 코드를 작성하는 올바른 방법이 같은 경우 : for
그냥 일을 혼란으로
for (int i 0; i < N; ++i)
if (!done[i] && d[i] < min_dist) {
min_dist = d[i];
v = i;
}
는 같은 줄에 if
퍼팅. 마찬가지로 두 개의 문 대신에 if
문이 있습니다.
추가 명확성을 위해; for 루프에도 중괄호를 추가하십시오. –
@JesperJuhl - 혼란을 피하기 위해 for 루프에도 중괄호를 추가하십시오.
스타일 문제라고 동의합니다. 그러나 내 개인적인 경험은 당신이 항상 중괄호를 추가하면 초보자가 혼란을 덜 받게된다는 것입니다. 나는 익숙하지 않은 코드가 그렇게 쉽게 읽는 것을 발견했다. 그래서 (개인적으로) 필자는 * 항상 * 중괄호를 추가해야한다고 생각합니다. 그러나; 맛의 문제 야. –
'나란히'는 무엇을 의미합니까? – NiVeR
이것은 for 문 안에있는 if 문입니다. 정확히 무엇을 얻지 못하니? "if"앞에 줄 바꿈을 넣으면 똑같이되지만 더 읽기 쉽습니다. 원한다면 중괄호를 추가하십시오. –
그 다음 라인에 있어야 할 필요가없는 경우, 대부분의 경우 당신이 넣는 공백 (새 라인 포함)은 당신에게 달려 있습니다. – Borgleader