Daten an bestehendes Array anfügen - Möglich?
-
Mahlzeit,
eine kleine (oder auch große) Frage:
Ich möchte innerhalb einer for-Schleife Daten an ein Array anfügen, dies aber nur, wenn innerhalb der for-schleife eine bestimmte Bedingung erfüllt ist.
Auf den Punkt gebracht: Ich habe das Problem, dass ich die Größe meines benötigten Arrays nicht kenne, sondern erst nach Abschluß der for-schleife diese Größe feststeht. Wie alloziere ich dann den Speicher für das Array? Ist das überhaupt möglich?
Meine 2 Ideen:
1. For-Schleife einmal durchlaufen lassen und somit nur Größe des Arrays bestimmen; dann Array generieren und dann die for-schleiße erneut durchlaufen lassen und die Werte einsortieren
2. eine Funktion schreiben, die ds alte array jeweils wieder "wegschmeißt" neues array allozieren mit einem Element mehr und Daten einsortieren.
Beide Varianten (besonders 2.) scheinen mir sehr unelegant zu sein. Hat jemand eine bessere Idee??
Danke
mfg
NablA
-
warum kennst du die anzahl der arrayelemete nicht?
char array[5];
somit ist die anzahl der elemte 5.
char *array; array = new char[numelements];
somit ist die anzahl der elemente "numelemets"
oder ist dein ablauf so:
char *array; forschleife; array = new char[anzahl]; //anzahl definiert in forschleife
-
@Fachmann: Hast du überhaupt durchgelesen, was nabla geschrieben hat? Er weiß einfach nicht im voraus, wieviele Elemente in sein Array reinkommen werden.
@nabla: Leg dir lieber eine Reserve an und hol dir immer dann einen größeren Datenblock, wenn diese Reserve aufgebraucht ist. (wenn du C++ Möglichkeiten verwenden kannst - nimm statt des arrays einen Container (vector etc), unter C gibt es auch noch die Möglichkeit, den reservierten Speicherblock per realloc() zu vergrößern (der vermutlich intern Variante 2 anwendet, aber besser optimiert ist))
-
@ CSTOLL:
Danke für den Tipp mit realloc(); Hatte ich verdrängt, dass es diese Funktion auch noch gibt. Werde das mal damit versuchen...
Das war genau, das was ich gesucht habe...
Das Problem ist ja, dass ich die Anzahl erst weiß, wenn die Forschleife komplett durch ist. Ich aber schon während des durchlaufens die Elemente einsortieren will...