Was bedeuten diese Terminologien in C++?Was ist der halbe offene Bereich und der Endwert
1.
vom end
Wert
2.
halboffenen Bereich - [begin, off_the_end)
ich über sie kam, während etwa für Schleifen zu lesen.
Was bedeuten diese Terminologien in C++?Was ist der halbe offene Bereich und der Endwert
1.
vom end
Wert
2.
halboffenen Bereich - [begin, off_the_end)
ich über sie kam, während etwa für Schleifen zu lesen.
ein halboffenen Bereich eines ist, das umfasst die ersten Element, aber schließt das letzte aus.
Der Bereich [1,5) ist halb offen und besteht aus den Werten 1, 2, 3 und 4.
„off Ende“ oder „über das Ende“ bezieht sich auf das Element nur nach das Ende einer Sequenz, und ist insofern speziell, dass Iteratoren dürfen darauf zeigen (aber Sie können nicht auf den tatsächlichen Wert, weil es nicht existiert)
Zum Beispiel im folgenden Code:
char arr[] = {'a', 'b', 'c', 'd'};
char* first = arr
char* last = arr + 4;
first
jetzt poi nts zum ersten Element des Arrays, während last
Punkte eins nach dem Ende des Arrays. Wir dürfen auf Punkt eine über das Ende des Arrays (aber zwei Vergangenheit nicht), aber wir sind nicht in dieser Position das Element zu versuchen, erlaubt den Zugriff auf:
// legal, because first points to a member of the array
char firstChar = *first;
// illegal because last points *past* the end of the array
char lastChar = *last;
Unsere zwei Zeiger, first
und last
definieren zusammen einen Bereich aller Elemente zwischen ihnen.
Wenn es ein halb offener Bereich ist, dann enthält es das Element, auf das first
zeigt, und alle Elemente dazwischen, aber nicht das Element, auf das last
zeigt (was gut ist, weil es nicht wirklich darauf hinweist) ein gültiges Element)
In C++ arbeiten alle Standardbibliotheksalgorithmen mit solchen halboffenen Bereichen.Zum Beispiel, wenn ich das gesamte Array an einen anderen Ort kopieren will dest
, mache ich das:
std::copy(first, last, dest)
Eine einfache for-Schleife folgt in der Regel ein ähnliches Muster:
for (int i = 0; i < 4; ++i) {
// do something with arr[i]
}
Diese Schleife geht aus 0 bis 4, aber sie schließt den Endwert, so dass der Bereich von Indizes abgedeckt ist halboffenen, speziell [0, 4)
Dies sind keine C++ - spezifischen Begriffe, sie sind allgemeine mathematische Begriffe.
[] und() bezeichnen, ob der Bereich einschließlich ist/exklusive des Endpunkts:
meist C++ for-Schleifen einen halboffenen Bereich abdecken (Sie sind das erste Element: zB for int i=0;
, aber das letzte Element auszuschließen: i < foo
, nicht i ≤ foo
)
Wie auf anderen Antworten erläutert, Halb OPE n Bereich ist auch ein mathematischer Begriff und Verwendung dieses Begriffs in Programmierung Kontext, es ist impliziert, dass der Ausgangspunkt ist enthalten und Endpunkt ist ausgeschlossen.
Was bedeutet es eigentlich im Zusammenhang mit der Programmierung in C/C++? Nehmen wir an, Sie werden die Elemente eines Integer-Arrays drucken. Sprechen Sie für die C-Sprache, weil Sie kein Laufzeitwissen für die Größe des Arrays haben, haben Sie zwei Möglichkeiten. Entweder müssen Sie die Größe des Arrays angeben und somit wird die Funktionssignatur wie folgt aussehen:
void printArray(int * array, int size);
oder Sie verwenden, um den halboffenen Bereich, was bedeutet, Sie zu bieten haben beide beginnen und enden Zeiger (und Funktion verarbeiten wird die beginnen, einschließlich, ohne Ende) zusätzlich zu dem Array selbst. Und die funktion signatur wird wie folgt;
void printArray(int * array, int * begin, int * end);
Um zu veranschaulichen, hier ist ein Beispiel für die Bereitstellung der Größe des Arrays;
#include <stdio.h>
void printArray(int * array, int size)
{
printf("Array: ");
for(int i = 0; i < size; i++)
printf("%2d ", array[i]);
printf("\n");
}
int main()
{
int array[5] = { 1, 2, 3, 4, 5 };
printArray(array, 5);
return 0;
}
In dem obigen Beispiel haben wir zwei Parameter an die printArray
Funktion übergeben wird, wie es auf der Funktionssignatur offensichtlich ist, wird der Zeiger auf das erste Element des Arrays (oder das Array selbst), und die Größe der das Array.
Wie oben beschrieben, können wir aber auch den halben Öffnungsbereich in der Funktionssignatur verwenden, der unten zu sehen ist.
#include <stdio.h>
void printArray(int * array, int * begin, int * end)
{
printf("Array: ");
for(int * index = begin; index != end; index++)
printf("%2d ", *index);
printf("\n");
}
int main()
{
int array[5] = { 1, 2, 3, 4, 5 };
printArray(array, array, array+5);
return 0;
}
Beide der Code wird die gleiche Ausgabe wie unten angezeigt;
Array: 1 2 3 4 5
Wie Sie die Funktion für den Bereich [begin, end)
sehen können, druckt der printArray
Funktion. Die index
, die tatsächlich ist ein Zeiger auf die Elemente der Ganzzahl-Array, beginnt von begin
, und es enthält die begin
und die For-Schleife endet, wenn index
entspricht der end
Zeiger, ausschließlich zur Verarbeitung der end
. Dies nannte ich halboffenen Bereich.
Halboffener Bereich ist die C++ Konvention.
Den Kantenwert ausschließen.Es wird hauptsächlich verwendet, wenn es sich um reelle/rationale Zahlen handelt - aber es kann auch auf ganze Zahlen angewendet werden. – amit
@amit danke, hab es geschafft! – ProgEnthu
danke allen für die Antworten. Das Konzept. – ProgEnthu