首頁 >後端開發 >C++ >為什麼標準範圍使用半開區間 [begin, end) 而不是閉區間 [begin, end]?

為什麼標準範圍使用半開區間 [begin, end) 而不是閉區間 [begin, end]?

DDD
DDD原創
2024-12-21 00:19:11198瀏覽

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

為什麼標準中的範圍是[begin, end) 而不是[begin, end]

在標準中,end()函數被定義為超過範圍的末尾而不是實際的末尾。這項決定一直是爭論的主題,並提出了幾個令人信服的理由來為其辯護。

主要論點之一,正如 Dijkstra 雄辯地指出的那樣,集中在計算差異範圍大小的簡單性上結束和開始之間。此外,包含下限(開始)被認為更自然,特別是在序列退化為空序列的情況下。相反,排除下限將需要引入「開始前一個」標記值,這會引入不必要的複雜性。

[begin, end) 約定也簡化了巢狀或迭代呼叫基於範圍的構造,使它們能夠自然地連結。相反,雙閉範圍會導致相差一的錯誤以及繁瑣且嘈雜的程式碼。例如,考慮[n0, n1)[n 的分區1, n2)[n2,n3)。

類似地,標準迭代循環 for (it = begin; it != end; it)執行結束 - 開始時間。如果兩端都包含在內,那麼可讀性就會大大降低,尤其是在處理空範圍時。

最後,從零開始的計數約定與 [begin, end) 方法很好地保持一致。當呈現 N 個元素的範圍(例如數組的元素)時,零作為自然的“開始”,允許該範圍表示為 [0, N),避免不必要的偏移或更正。

總之,範圍中的 [begin, end) 約定是經過仔細考慮的設計選擇的結果。它確保範圍大小計算的簡單性、處理空序列時的自然性、易於處理嵌套的基於範圍的結構以及與從零開始的計數對齊。

以上是為什麼標準範圍使用半開區間 [begin, end) 而不是閉區間 [begin, end]?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn