Array ohne Grössenangabe

cibal_gina

Grünschnabel
Hi !

Mein Programm soll unter anderem in einem Array Elemente verändern, bzw hinzufügen und entfernen.
Ich habe mir eine Klasse erstellt Array erstellt mit einem Konstruktor Array.
Das zugehörige array.h:
Code:
    #ifndef ARRAY_H
    #define ARRAY_H
    
    #include <iostream>
    
    using namespace std;
    
    Class Array {
     public: 
      Array( const unsigned int n );
      ~Array();
      
     private:
      void initArray();
      double * x_Array;
      
      unsigned int m_N;
    }
    #endif
Und hier das array.cc:
Code:
   #include "array.h"
   
   Array::Array( const unsigned int n ) {
     m_N = n;
   
     initArray();
   }
   
   Array::~Array() {
     if( x_Array ) 
   	delete( x_Array );
   }
   
   void Array::initArray() {
     x_Array = new double[]; 
   }
Nun meldet mir der gcc Kompiler an roter Stelle
error: expected primary-expression before ']' token

Die Kopilierung läuft durch, wenn ich die Dimension im initArray mit
x_Array = new double[m_N];
reinsetze.
Aber dann kann ich die Grösse des Arrays nicht mehr ändern, denn dann bekomme ich, wenn ich Element in das Array hinzufüge, ein Segmantation Fault.
Ich hoffe, dass ich mein Problem halbwegs verständlich beschireben habe und das jemand eine Lösung kennt.
 
moin


Also du musst dort, wenn du es so machst auf jedenfall na Größe angeben.
Kann man nicht nachträglich noch Speicher hinzu allozieren?!


mfg
umbrasaxum
 
Ich habe gerade im Buch geschaut und leider nichts zur Speicheralloziierung gefunden :(
Weisst Du wie das geht?
Wie muss ich das Programm verändern, damit ich da nachträglich Elemente hinzufügen kann?
 
Es gibt da mehrere Möglichkeiten dies zu tun...
Ein Stichwort wäre LinkedList (googlen oder Boardsuche). Nachteile hier sind langsamer Zugriff aber schnelles Einfügen
Andere Methode (wohl eine sehr einfach): Du erzeugst das Array am Anfang mit einer bestimmten Anzahl von Werten (im Klassenaufruf definiert). Wenn man nun ein Index aufruft der größer ist als die aktuelle Größe des Arrays erzeugst du im Heap ein neues Array mit der neuen Größe. Du kopierst das alte Array in das neue und gibst den Speicher vom alten frei. Nachteil: Langsames einfügen Elemente, aber schneller Zugriff auf bestehende Elemente.

Soviel zur Theorie.
 
Zurück