array und unbeschränkte aufnahme von ziffern



  • hiho :>

    Ich sitze vor volgendem Problem:

    Ziel:
    *Mein neu erstellter Datentyp 'paekchen' soll in einem Array eine theoretisch unbeschränkte Anzahl von Ziffern aufnehmen können(zur Darstellung von reelen Festkommazahlen).

    Diese neue Instanz soll halt bei Bedarf dynamisch in der erforderlichen Größe hergestellt werden können. Dazu soll der Typ eine Komponente für die Anzahl der dargestellten Ziffern enthalten.
    *

    Frage:
    Wie erzeuge ich eine Struktur dieser Art für n darzustellende Zeichen?

    struct geschenk
    {
       char c_array[]; // Grundgeruest ds Arrays
       int anzahl;     // Komponente für die Anzahl der dargestellten Ziffern [zaehler]
    
    }
    
    geschenk paeckchen;
    

    Irgendwie hänge ich gerade in der Luft -.-



  • Dynamische Verwaltung erhältst du am besten mit dem std::vector. Das ist ein Datentyp aus der C++-Standardbibliothek, der ein Array von Objekten beinhaltet, das Array ist größenveränderbar. Also wie geschaffen für deinen Zweck 😉



  • Konstruktor rein, bissl mit new/delete auseinandersetzen und jenachdem deinen Speicher dynamisch verwalten.
    Versuchs einfach mal 😉



  • Ehm also, als erstes muss du dir bei einem dynamischen Array immer die Größe Merken.
    Anlegen
    Per new mit entsprechender Größe deinen Zeiger auf einen Array auf dem Heap zeigen lassen.

    Zerstören
    Per delete [] den Array auf dem Heap, auf den dein Zeiger zeigt, freigeben.

    Vergrößern
    (1) Neues Array auf dem Heap per new erstellen (Größe + Wachstumswert) und dann die alten Daten rüber kopieren. Deinen Zeiger auf den Array zeigen lassen.
    (2) Direkt immer größere "Datenpakete" anlegen. D.h. statt wenn der Array voll ist nur die benötigte Anzahl hinzu zu fügen, gehst du hin und reservierst direkt einen größeren Bereich. Das ist, je nach Aufgabe, etwas schneller.



  • (D)Evil, genau das macht doch std::vector (hat Badestrand doch schon erwähnt).



  • Joa korrekt 😛 Aber wenn er es selbst machen will, muss auch ER wissen wie das geht 😛


Anmelden zum Antworten