Archiv verlassen und diese Seite im Standarddesign anzeigen : Arraygröße ändern
Tach!
Nicht, dass ich es im Moment bräuchte, aber ich würde gerne folgendes wissen:
Kann ich die Größe eines Arrays, das ich mit new erzeugt habe, ändern? Oder muss ich dann Listen oder so benutzen?
Klar, ich könnte ein neues Array in der gewünschten Größe erstellen, die Inhalte des alten Arrays kopieren und dann das alte löschen, aber gibt es für new-Arrays auch so eine Methode, die wie die Funktion realloc() arbeitet (ich könnte natürlich auch malloc() zum Anfordern des Arrays benutzen, aber ich halte es neuerdings doch immer mit new)?
probier mal delete ... das ist das gegenstück zu new.
Felix Kaiser
24.08.2002, 20:50
Im C++ Builder gibts ein Objekt für dynamische Arrays, in dem z.B. Größe ändern problemlos möglich ist. Geht dann auch genauso einfach wie z.B. in Delphi. Wenn du diesen benutzt, schlag mal in der Hilfe nach unter 'Dynamische Arrays'.
@ D3DSH33P: Ich kapier nicht, was du meinst. Mit delete löscht man ein mit new erstelltes Array, aber wie soll ich mit delete die Größe ändern :rolleyes:?
@ Felix Kaiser: Ja, es gibt ja Vorlagen für dynamische Arrays, aber muss ich da denn sonne Klasse (also Liste oder Array-Klassen gibt's ja auch) dafür nehmen. Kann man denn nicht irgendwie die Größe eines mit new erstellten Arrays ändern?
also, nein.
du kannst sie nur ändern, indem du den array mit delete löscht und ihn dann mit new mit der neuen größe wieder erstellst.
ich würde dafür eine klasse definieren und halt ne methode die die größe ändert.
irgendwo muss ja aber auch gespeichert sein, wie lang das array ist. ich weiss leider net, wo, aber vielleicht weiss es jemand anderes ... dann musst du die länge eines elements (lengthof) * anzahl der gewünschten elemente nehmen.
sorry, das mit delete bringts nicht, hab da was falsch verstanden. weil wenn man das array erst neu erstellen muss, um die größe zu ändern, ist es ja nicht mehr dynamisch ;)
Okay, ich benutz dann Listen oder so was (ich könnte natürlich auch die Funktionen aus malloc.h nehmen).
Wollte ich eigentlich auch nur mal so nebenbei wissen.
Danke :)!
also solche dinge sind fast wie geschaffen fuer die std (standard template library) schau dir mal den std::vector an, das ist ein dynamisches feld!
TekWarrior
13.09.2002, 22:41
es gibt ne einfache möglichkeit die anzahl der elemente eines arrays zu berechnen
sizeof(array) / sizeof(arraytyp)
Danke, aber die Arraygröße wäre ja nichts das Problem, sondern die Frage, wie man sie verändert. Sonst müsste ich ja ein neues Array der gewünschten Größe erstellen, die Inhalte des alten kopieren und dann das alte löschen.
Kann man eigentlich die Größe eines Arrays mit sizeof herausfinden. Der Arrayname ist ja selbst nur ein Vektor und kann man nicht nach sizeof nur Typen (und keine Variablen) angeben? Und selbst wenn das ginge, müsste sizeof ja dann die Größe eines Arrayelements zurückgeben, weil der Arrayname immer auf das erste Element zeigt.
also fuer solche sachen nehme ich immer std::vectoren, die sind schnell haben viele routinen (sort ...) und du musst dich um nichts kuemmern und es ist Ansi C++
Ja, da gibt's ja einige Vorlagen für.
P. S.: Eigentlich ist die Frage ja schon längst abgeschlossen :D.
bsp
inlclude <vector>
using std::vector;
...
vector<int> feld;
feld.clear ();
for (int i= 0; i < 1000; i++)
feld.insert (feld.end(), i);
....
if (feld.size () > 33)
int x = feld[33];
Ja, so muss man's in C++ machen (oder eben mit malloc() in C).
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.