Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Dynmische Arrays Deklarations Frage!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.12.2015, 13:14 Uhr
~cppStarter
Gast


Hey, ich hätte eine frage zu folgendem code:


C++:
Median::Median() {
    values = NULL;
    valueCount = 0;
}

void Median::addNumber(int value) {
    int *valuesNew = new int[valueCount+1];
    bool newValueInserted = false;
    for (int i = 0; i < valueCount; ++i) {
        if (newValueInserted) {
            valuesNew[i+1] = values[i];
        } else {
            if (values[i] < value) {
                valuesNew[i] = values[i];
            } else {
                valuesNew[i] = value;
                newValueInserted = true;
                valuesNew[i+1] = values[i];
            }
        }
    }
    
    if (!newValueInserted) {
        valuesNew[valueCount] = value;
    }
    
    delete [] values;
    values = valuesNew;
    ++valueCount;
}




un zwar die Stelle:

C++:
for (int i = 0; i < valueCount; ++i) {
        if (newValueInserted) {
            valuesNew[i+1] = values[i];
        } else {



vorher stamm das array values[i] ? oben im Konstruktor wurde doch values als NULL initiallisiert . Kann man daraus einfach ein array erstellen bzw überseh ich etwas?
Vielen Dank für die Hilfe!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.12.2015, 16:28 Uhr
ao

(Operator)


Bei jedem Aufruf von addNumber wird für valuesNew ein neues Array angefordert, das um 1 Element länger ist als das letzte. In dieses neue Array werden die alten Daten hineinkopiert, und der neu hinzugekommene Wert (Parameter value) wird richtig einsortiert.

Am Ende der Funktion wird der Zeiger auf das neue Array in values gespeichert und valueCount inkrementiert. Vom Ende des ersten Aufrufs an gibt es also in values ein gültiges Array, aus dem vom zweiten Aufruf an Daten kopiert werden können.

Im ersten Aufruf zeigt values noch auf den Initialwert NULL. Da aber gleichzeitig valuecount noch == 0 ist, wird die for-Schleife nicht betreten, weil die Eintrittsbedingung (i < valueCount) nicht erfüllt ist. Es wird also kein Schaden angerichtet.

Der Code ist ziemlich tricky, aber er scheint richtig zu sein. Trotzdem würde ich Punktabzug geben dafür, dass jeglicher Kommentar fehlt. Sowas darf man nicht schreiben, ohne zu kommentieren.

Dieser Post wurde am 30.12.2015 um 16:32 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: