나는 for
이런 루프를 거의 보지 못했다 .
for (int i = 0; 5 != i; ++i)
{}
루프 에서 1 씩 증가 할 때 >
또는 <
대신 사용해야하는 기술적 이유가 있습니까? 아니면 이것은 관습에 더 가깝습니까?!=
for
답변
while (time != 6:30pm) {
Work();
}
오후 6시 31 분입니다 … 젠장, 이제 집에 갈 다음 기회는 내일입니다! 🙂
이것은 더 강한 제한이 위험을 완화시키고 이해하기에 더 직관적임을 보여줍니다.
답변
기술적 이유는 없습니다. 그러나 위험, 유지 관리 성 및 코드에 대한 이해가 완화됩니다.
<
또는 >
!=
대부분의 경우에 동일한 목적을 달성하는 것보다 더 강한 제한이 있으며 (모든 실제적인 경우에도 말하고 있습니다).
답변
네 이유가 있습니다. 이런 식으로 for 루프를 작성하면 (일반 인덱스 기반)
for (int i = a; i < b; ++i){}
그런 다음 a
및의 모든 값에 대해 예상대로 작동합니다 b
(예 : a > b
무한대 대신에 0 반복 을 사용한 경우i == b;
).
반면에 반복자에 대해서는 다음과 같이 작성하십시오.
for (auto it = begin; it != end; ++it)
모든 반복자가을 구현해야 operator!=
하지만 모든 반복자에 대해 그런 것은 아닙니다.operator<
.
범위 기반 for 루프
for (auto e : v)
공상 설탕뿐만 아니라 잘못된 코드를 작성할 가능성을 상당히 줄입니다.
답변
당신은 같은 것을 가질 수 있습니다
for(int i = 0; i<5; ++i){
...
if(...) i++;
...
}
내부 변수로 루프 변수를 작성하면 i!=5
해당 루프가 중단되지 않을 수 있습니다. 불평등을 확인하는 것이 더 안전합니다.
가독성에 대한 편집 . 불평등 형태가 더 자주 사용됩니다. 따라서 이해해야 할 것이 없기 때문에 읽기 속도가 매우 빠릅니다 (작업이 일반적이므로 브레인로드가 줄어 듭니다). 따라서 독자가 이러한 습관을 활용하는 것이 좋습니다.
답변
마지막으로 이것을 방어 프로그래밍 이라고 합니다 합니다. 이는 프로그램에 영향을 미치는 현재 및 미래의 오류를 피하기 위해 항상 가장 강력한 사례를 취하는 것을 의미합니다.
방어 프로그래밍이 필요하지 않은 유일한 경우는 상태가 사전 및 사후 조건에 의해 입증 된 경우입니다 (그러나 이것이 모든 프로그래밍 중 가장 방어적임을 증명).
답변
나는 같은 표현이
for ( int i = 0 ; i < 100 ; ++i )
{
...
}
보다 의도를 더 표현한다
for ( int i = 0 ; i != 100 ; ++i )
{
...
}
전자는 조건이 범위에 대한 독점 상한에 대한 테스트임을 분명히 지적합니다. 후자는 종료 조건의 이진 테스트입니다. 그리고 루프의 본문이 사소한 것이 아니라면, 인덱스 for
자체 가 명령문 에서만 수정 된 것은 분명하지 않을 수 있습니다.
답변
반복자는 !=
표기법 을 가장 자주 사용할 때 중요한 경우입니다 .
for(auto it = vector.begin(); it != vector.end(); ++it) {
// do stuff
}
부여 : 실제로는 range-for
:에 의존하는 동일한 내용을 작성합니다 .
for(auto & item : vector) {
// do stuff
}
하지만 요점은 남아있다 : 하나는 일반적으로 사용하는 반복자를 비교 ==
하거나 !=
.