Heim > Backend-Entwicklung > C++ > Warum verwenden Standardbereiche ein halboffenes Intervall [Anfang, Ende] anstelle eines geschlossenen Intervalls [Anfang, Ende]?

Warum verwenden Standardbereiche ein halboffenes Intervall [Anfang, Ende] anstelle eines geschlossenen Intervalls [Anfang, Ende]?

DDD
Freigeben: 2024-12-21 00:19:11
Original
159 Leute haben es durchsucht

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

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage