Array dynamisch vergrößern C++Builder

SebastianHL

Mitglied
Hallo,

ich möchte ein Array welches ich beim Programmstart anlege per buttenklick vergrößern b.z.w. verkleinern. Gibt es da irgeneine möglichkeit ? Ich dache erst daran ein zweites anzulegen das rüberzukopieren! Aber diese Lösung finde ich nicht optimal !
kann mir jemmand helfen?

Gruß
 
Du kannst realloc nehmen, was intern etwa das tut, was Du nicht selber machen möchtest. Oder Du nimmst den STL-Datentyp vector. Da kannst Du dann Elemente anhängen.
 
Ich hab mir au mal darüber Gedanken gemacht und hatte vor längerer Zeit mal ne Funktion geschrieben mit der man das Array vergrößern konnte. Hab dabei au ein 2tes Array verwendet.

Aber momentan benutz ich au nur vector. Allerdings gehört vector doch zu MS, oder?
Wenn du das im C++ Builder verwenden willst musst du bissle rumkopieren aber es funktioniert.


gruß Kangaxx
 
Hi.
Kangaxx hat gesagt.:
Aber momentan benutz ich au nur vector. Allerdings gehört vector doch zu MS, oder?
Wenn du das im C++ Builder verwenden willst musst du bissle rumkopieren aber es funktioniert.
Nein, std::vector gehört zur C++ Standard Template Library und deshalb kann man es auch überall verwenden.

Gruß
 
Jau, einfach die vector.h inkludieren und schon kann es los gehen.
Such einfach ein bisschen hier im Forum nach "Vector".
 
hey danke jungs !

ich habe da noch ne frage zu dem Vector :
kann ich in dem Vector auch klassenobjekte speichern? Im endeffect geht es darum beliebig viele Objekte einer klassen per butten (pro buttenklick 1 objekt) zu erstellen und mit einem anderen butten möchte ich das objekt wieder aus dem speicher entfernen.

gruß
Sebastian
 
Da std::vector eine Template Klasse ist, kann man jeden beliebigen Typ darin speichern, solange für diesen Typ ein Kopierkonstruktor und Zuweisungsoperator definiert ist.

Gruß
 
Zuletzt bearbeitet:
Also ich weiß ja nicht was du mit dem Vektor sonst noch machen willst und wie wichtig dir die Performance dabei ist. Beim Vektor ist es natürlich so (wie auch beim Array), dass alle Elemente im Intervall (i+1, n) kopiert werden müssen wenn du ein Object i mitten aus einem Vektor mit n Elementen entfernst.

Bei mehreren hundert Objekten geht das dann natürlich auf die Performance. Da wäre dann eine Liste die bessere Wahl. Allerdings ist bei einer Liste der Zugriff nicht wahlfrei und die Komplexität liegt bei O(n).

Für ein kleines Progrämmchen wo die Ausführungszeit relativ unkritisch ist solltest du aber mit dem std::vector erstmal gut bedient sein...

Gruß
 
Zurück