"for"문에서`! =`또는`<`를 사용해야합니까?
이 두 for 문을 모두 보았습니다.
for(i=0;i<10;i++)
for(i=0;i!=10;i++)
나는 그들이에 도달하면 모두 멈춘다는 것을 알고 10
있지만 두 번째 것을 사용하는 것이 더 나은 것 같습니다 (들었습니다). 반복기를 사용하여 벡터의 멤버에 액세스 할 때 반복기 조건 < vec.end()
과 반복기의 차이점은 무엇인지 알고 싶습니다.!= vec.end()
for(i = start; i != end; ++i)
이것은 "표준"반복자 루프입니다. 포인터와 표준 라이브러리 반복자 모두에서 작동한다는 이점이 있습니다 ( operator<
정의 된 반복기에 의존 할 수 없음 ).
for(i = start; i < end; ++i)
이것은 표준 라이브러리 반복자 ( operator<
정의 하지 않는 한 )에서는 작동하지 않지만 end
어떤 이유로 지나가 더라도 여전히 중지되므로 약간 더 안전하다는 장점이 있습니다. 정수를 반복 할 때 이것을 사용하도록 배웠지 만 실제로 "모범 사례"로 간주되는지는 모르겠습니다.
내가 일반적으로 쓰는 방법은 선호하는 것 <
입니다.
둘 다 대부분의 상황에서 작동합니다.
어떤 이유로 루프에서 실행되는 코드 본문 i
이보다 큰 것으로 변경 10
되면 첫 번째 버전은 루프를 중지하지만 두 번째 버전은 영원히 실행됩니다.
내 일상적인 연습은 <
정수와 같은 간단한 유형으로주기를 반복 !=
할 때 사용 하고 stl 종류의 반복기로 작업 할 때 사용하는 것입니다.
for ( initialization ; termination condition ; iteration )
그 각각에 대해 들어, 귀하의 요구 사항에 맞게 youself 최고의 하나를 선택 termination condition
하면 다음과 같은 이진 조건 연산자의 사용 >
, <
, >=
, <=
,!=
주어진 질문에 대해 임의의 경우를 고려하십시오.
for(i=0;i!=10;i++)
{
.
.
i=11; //somewhere if the loop variable is changed to a value greater than 10 (this assumption is solely for demo)
.
.
.
}
이 경우 루프는 무한한 것으로 판명됩니다. 오히려 condition을 사용하면 i<10
평소대로 작동합니다. 그래서 내 요점은 첫 번째 접근 방식이 조건을 엄격하게 설정하는 것이 조금 더 안전하다는 것 입니다.
가장 좋은 방법은! =를 반복자 (C ++)와 함께 사용하고 그렇지 않으면 <를 사용하는 것입니다. 절대로 == 또는! =를 float / doubles와 함께 사용하지 마십시오. 다음 루프는 무한 루프입니다.
for (double i = 0.0; i != 1.0; i += 0.1)
printf("yes, I'm an infinite loop ;)");
! =는 i의 값이 10을 초과하면 테스트가 참을 평가하도록 허용하고, <은 내가 10을 초과하거나 단순히 그와 같을 경우 거짓으로 평가하도록합니다.
i의 값이 루프 본문 내에서 변경 될 수 있다면 고려할 수 있습니다.
그러나 정해진 횟수만큼 무언가를하려는 경우 <가 더 설명 적이지만 둘 다 충분합니다. ! = 간단한 단계 10 개 항목 및 작업 수행 루프의 경우 의도를 명시 적으로 표시하는 측면에서 차선책으로 간주되어야합니다.
나는 그들이 10에 도달하면 모두 멈춘다는 것을 알고 있지만 두 번째 것을 사용하는 것이 더 나은 것 같습니다.
그것은 마이크로 최적화입니다. 더 의미있는 것을 사용하십시오 (위 <
가 더 의미가 있습니다).
무엇이 다른가요?
첫 번째 버전은 부등식 연산자를 사용하고 두 번째 버전은 !=
less 연산자를 사용합니다 <
.
나는 보통 <
다른 사람들이 언급 한 이유로 for-loops에서 사용 합니다. while-loops와 더 발전된 for-loops에서는 !=
내 프로그램이 무엇을하는지 추론하기가 훨씬 쉽습니다.
와 같은 배열에서 '5'의 첫 번째 실행 후 위치를 찾고 싶다고 가정 해보십시오 [5,5,5,3,5,2,3,2,0]
. 그것은 우리가 원하는 것 k
입니다 0 <= i < k => a[i] = 5
.
int pos = 0;
// Inv: a[0..pos) = 5
while (pos != N && a[pos] == 5)
pos = pos+1;
루프가 실행되면 루프 가드의 역이 참임을 알 수 있습니다 : pos == N || a[pos] != 5
. 어느 쪽이든 우리는 pos
우리가 원하는 것을 가지고 있습니다 .
지금 우리가 사용했던 말을 <
모든 우리가 나중에 알았 것, 루프 가드에 pos >= N || a[pos] != 5
,하지만 그건 우리가되고 싶어 상황이 아니다. 더 많은 일을하고, 우리가 증명할 수 있음을 우리는에서 가능하지 않을 수 pos > N
있지만, !=
루프 가드에서 사용하는 것과 비교하여 시간 낭비와 같은 솔기 .
참조 URL : https://stackoverflow.com/questions/8178463/in-a-for-statement-should-i-use-or
'programing' 카테고리의 다른 글
getElementById ()는 요소가 존재하더라도 null을 반환합니다. (0) | 2021.01.18 |
---|---|
asp.net-mvc의 서버에서 텍스트 파일을 읽는 가장 좋은 방법은 무엇입니까? (0) | 2021.01.18 |
파일을 무시하는 방법 grunt uglify (0) | 2021.01.18 |
LLDB가 view.bounds를 인쇄 할 수없는 이유는 무엇입니까? (0) | 2021.01.18 |
16 진수 문자열에 대한 바이트 배열 (0) | 2021.01.18 |