Heim >Backend-Entwicklung >C++ >Warum verwenden Standardbereiche ein halboffenes Intervall [Anfang, Ende] anstelle eines geschlossenen Intervalls [Anfang, Ende]?
Warum Bereiche im Standard [begin, end) anstelle von [begin, end] sind
Im Standard ist end() Eine Funktion ist als eine Funktion definiert, die über das Ende eines Bereichs hinausgeht und nicht am tatsächlichen Ende. Diese Entscheidung war Gegenstand von Debatten, zu deren Verteidigung mehrere zwingende Gründe angeführt wurden.
Eines der Hauptargumente, wie Dijkstra eloquent anführte, dreht sich um die Einfachheit, die Größe des Bereichs als Differenz zu berechnen zwischen Ende und Anfang. Darüber hinaus wird die Einbeziehung der Untergrenze (Begin) als natürlicher angesehen, insbesondere in Szenarien, in denen Sequenzen zu leeren Sequenzen degenerieren. Umgekehrt würde das Ausschließen der Untergrenze die Einführung eines „Eins-vor-dem-Anfang“-Sentinel-Werts erfordern, was unnötige Komplexität mit sich bringen würde.
Die [begin, end)-Konvention vereinfacht auch die Handhabung von verschachtelten oder iterierte Aufrufe an bereichsbasierte Konstruktionen, die eine natürliche Verkettung ermöglichen. Im Gegensatz dazu würde ein doppelt geschlossener Bereich zu eins-zu-eins-Fehlern und umständlichem und lautem Code führen. Betrachten Sie zum Beispiel eine Partition von [n0, n1)[n 1, n2)[n2,n3).
In ähnlicher Weise führt die Standard-Iterationsschleife für (it = begin; it != end; it) end aus - Anfangszeiten. Dies wäre weitaus weniger lesbar, wenn beide Enden inklusive wären, insbesondere wenn es um leere Bereiche geht.
Schließlich stimmt die auf Null basierende Zählkonvention gut mit dem [begin, end)-Ansatz überein. Wenn ein Bereich von N Elementen (z. B. die Elemente eines Arrays) dargestellt wird, dient Null als natürlicher „Anfang“, sodass der Bereich als [0, N] dargestellt werden kann, wodurch unnötige Offsets oder Korrekturen vermieden werden.
Zusammenfassend lässt sich sagen, dass die Konvention [Anfang, Ende] in Bereichen das Ergebnis sorgfältig durchdachter Designentscheidungen ist. Es gewährleistet Einfachheit bei der Berechnung der Bereichsgröße, Natürlichkeit beim Umgang mit leeren Sequenzen, einfache Handhabung verschachtelter bereichsbasierter Konstruktionen und Ausrichtung mit nullbasierter Zählung.
Das obige ist der detaillierte Inhalt vonWarum verwenden Standardbereiche ein halboffenes Intervall [Anfang, Ende] anstelle eines geschlossenen Intervalls [Anfang, Ende]?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!