‘for’루프에서 1 씩 증가 할 때! = 대신> (<)를 사용해야하는 기술적 이유가 있습니까? 거의 보지 못했다

나는 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
}

하지만 요점은 남아있다 : 하나는 일반적으로 사용하는 반복자를 비교 ==하거나 !=.