# Variable Arraygröße



## klein-odd (10. März 2007)

Hallo !

Ich stehe vor einer Aufgabe,  Variablen, die sich im Lauf eines Programms
durch Berechnungen oder Dateilesen ergeben, in Arrays zu speichrern.

Egal, ob das Strings, Floats uva sind, ist es kein Problem, 
wenn das Array im voraus genügend Platz hat.

Ich kenne jedenfalls die Anzahl der Arrayelemente zum Programmstart nicht.
Meine Ideallösung wäre jedes Array mit einem Element im Sack zu deklarieren, z.B. :

string WORT[1];
double zahl[1];

und nach Bedarf den Arrayrahmen zu erweitern.

Meine Versuche waren nur dann gelungen, wenn ich z.B.ein Element an ein bekanntes Array "angehängt" habe, zB. string Array WORT mit einem Element:

string WORT[1];

dem ersten Element wird der Sinn des Lebens zugewiesen :
WORT[0]="Hallo";

Nach einer Laufzeit findet sich schöne Euridike und das Array kriegt zwei neue Elemente :

WORT[1]= " ";
WORT[2]="Euridike";

Solche Versuche haben bei mir schon gute Ergebnisse gezeigt,
ich konnte zur Bestätigung das Ganze mit cout ausgeben.

In den Schleifen (mit for(int i:0; i<ende; i++  )) scheitert es. 

Warum ?
Meistens wird das Ende nicht erreicht und das System bricht das Programm ab.

Es geht im konkreten Fall um Einlesen 
von früher nicht bekannter Anzahl von z.B. Wörtern (string) mit einem Stream.

Ein schönes sonniges Wochenende !


----------



## Online-Skater (10. März 2007)

Hallo wenn du ein Array mit "[1]" deklarierst heißt das du reservierst auch nur einen Speicherplatz dafür, alles weitere was du anhängst wird aber irgendwo auf undefinierten Speicherplatz geschrieben, somit kannst du es auch nicht wieder zum Vorschein bringen.

Wenn du zur Laufzeit weist wie groß das Array sein soll dann erstelle es zur Laufzeit, ansonsten würde sich auch der Datentyp verkettete Listen anbieten.


----------



## MSAB (10. März 2007)

Warum benutzt du als Arrays nicht einfach Vektoren, da kannst du dann ganz einfach mit push_back() ein neues Element hinzufügen. Daher ist es beim initalisieren egal, wieviele Element in den Vektor passen sollen.  


```
vector < string > WORT;

WORT.push_back("Hallo");
WORT.push_back("Euridke");

for(int i=0;i<WORT.size();i++)
{
      cout << WORT[i] << endl; //oder besser "WORT.at(i)"
}
```


----------

