>백엔드 개발 >C++ >표준 범위가 닫힌 간격[시작, 끝] 대신 반개방 간격[시작, 끝)을 사용하는 이유는 무엇입니까?

표준 범위가 닫힌 간격[시작, 끝] 대신 반개방 간격[시작, 끝)을 사용하는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-21 00:19:11161검색

Why Do Standard Ranges Use a Half-Open Interval [begin, end) Instead of a Closed Interval [begin, end]?

표준의 범위가 [시작, 끝] 대신 [시작, 끝)인 이유

표준에서 끝() 함수는 실제 끝이 아니라 범위 끝을 지나는 것으로 정의됩니다. 이 결정은 논쟁의 대상이 되었으며 이를 옹호하는 몇 가지 설득력 있는 이유가 제시되었습니다.

Dijkstra가 설득력 있게 언급한 주요 주장 중 하나는 범위의 크기를 차이로 계산하는 단순성에 중점을 두고 있습니다. 끝과 시작 사이. 또한 하한(시작)을 포함하는 것이 더 자연스러운 것으로 보입니다. 특히 시퀀스가 ​​빈 시퀀스로 변질되는 시나리오에서는 더욱 그렇습니다. 반대로, 하한을 제외하면 "시작 전 1" 센티널 값을 도입해야 하므로 불필요한 복잡성이 발생합니다.

[begin, end) 규칙은 또한 중첩 또는 범위 기반 구성에 대한 반복 호출을 통해 자연스럽게 연결될 수 있습니다. 대조적으로, 이중으로 닫힌 범위는 하나 하나씩 벗어난 오류와 번거롭고 잡음이 많은 코드로 이어질 것입니다. 예를 들어, [n0, n1)[n 파티션을 생각해 보세요. 1, n2)[n2,n3)

마찬가지로 (it = start; it != end; it) 종료 - 시작 시간을 실행합니다. 양쪽 끝이 모두 포함된 경우, 특히 빈 범위를 처리할 때 읽기가 훨씬 어려워집니다.

마지막으로 0부터 시작하는 계산 규칙은 [시작, 끝) 접근 방식과 잘 맞습니다. N 요소 범위(예: 배열 요소)와 함께 제공되면 0은 자연스러운 "시작" 역할을 하여 범위를 [0, N)으로 표시할 수 있으므로 불필요한 오프셋이나 수정을 피할 수 있습니다.

결론적으로 범위의 [시작, 끝) 규칙은 신중하게 고려한 디자인 선택의 결과입니다. 범위 크기 계산의 단순성, 빈 시퀀스 처리 시 자연스러움, 중첩된 범위 기반 구성 처리의 용이성, 0 기반 계산 정렬을 보장합니다.

위 내용은 표준 범위가 닫힌 간격[시작, 끝] 대신 반개방 간격[시작, 끝)을 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.