2012-10-25 9 views
16

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.

+0

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

+0

@amit danke, hab es geschafft! – ProgEnthu

+0

danke allen für die Antworten. Das Konzept. – ProgEnthu

Antwort

24

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)

14

Dies sind keine C++ - spezifischen Begriffe, sie sind allgemeine mathematische Begriffe.

[] und() bezeichnen, ob der Bereich einschließlich ist/exklusive des Endpunkts:

  • [schließt den Endpunkt
  • (schließt den Endpunkt
  • [] = 'geschlossen', die beide enthält Endpunkte
  • () = ‚Öffnen‘ schließt beide Endpunkte
  • [) und (] sind beide ‚halboffene‘ und umfassen nur einen Endpunkt

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)

0

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.