Why Ranges in the Standard Are [begin, end) Instead of [begin, end]
In the Standard, the end() function is defined as one past the end of a range rather than at the actual end. This decision has been the subject of debate, with several compelling reasons offered in its defense.
One of the primary arguments, as eloquently stated by Dijkstra, centers around the simplicity of calculating the size of the range as the difference between end and begin. Additionally, the inclusion of the lower bound (begin) is seen as more natural, especially in scenarios where sequences degenerate into empty ones. Conversely, excluding the lower bound would necessitate the introduction of a "one-before-the-beginning" sentinel value, which would introduce unnecessary complexity.
The [begin, end) convention also simplifies the handling of nested or iterated calls to range-based constructions, enabling them to chain naturally. In contrast, a doubly-closed range would lead to off-by-one errors and cumbersome and noisy code. Consider, for instance, a partition of [n0, n1)[n1, n2)[n2,n3).
Similarly, the standard iteration loop for (it = begin; it != end; it) executes end - begin times. This would become far less readable if both ends were inclusive, especially when dealing with empty ranges.
Finally, the zero-based counting convention aligns well with the [begin, end) approach. When presented with a range of N elements (such as the elements of an array), zero serves as the natural "beginning," allowing the range to be represented as [0, N), avoiding unnecessary offsets or corrections.
In conclusion, the [begin, end) convention in ranges is a result of carefully considered design choices. It ensures simplicity in range size calculations, naturalness when dealing with empty sequences, ease in handling nested range-based constructions, and alignment with zero-based counting.
The above is the detailed content of Why Do Standard Ranges Use a Half-Open Interval [begin, end) Instead of a Closed Interval [begin, end]?. For more information, please follow other related articles on the PHP Chinese website!