Array mit nicht vorher bekannter anzahl von elementen während programmlauf erzeugen
-
Hallo zusammen,
in meinem laufenden Programm wird eine Zahl berechnet, wie ist hier ja nicht von Bedeutung. Nun möchte ich während des Programmablaufs ein Array mit sovilen Elementen erstellen, wie halt die berechnete Zahl ist.
Das soll später dazu dienen, dass quasi jede Zahl abgearbeitet wird. Wenn die Zahl bearbeitet wurde, wird an di entsprechende stelle im Array eine 1 geschreiben. So kann ich dann überwachen, ob die entsprechende Zahl schon bearbeitet wurde.
Beispiel:
die berechnete zahl ist 12, also ein array mit 12 Elementen erstellen und alle mit nullen füllen. dann wird z.b. die fünf bearbeitet. dann soll an im array an 5. stelle eine 1 eingetragen werden. wenn dann per zufall noch mal die 5 kommt, steht da ja eine eins und ich weiß, das ich das schon hatte und nicht weiter machen brauche.
wäre toll, wenn mir da jemand auf die sprünge helfen könnte, wie man so ein array während der laufzeit mit der entsprechenden anzahl von elementen erstellt.
gruß
Jörgi
-
Am einfachsten mit:
TYP* array=new Typ[n]; //rechnen auf array delete[] array;(du kannst dynamische Arrays nur auf dem Heap anlegen, für Stack-Strukturen muß die Größe zur Compile-Zeit bekannt sein)
Alternative Möglichkeit wäre noch, einen STL-Container zu verwenden, z.B. vector<> oder deque<>.
-
(du kannst dynamische Arrays nur auf dem Heap anlegen, für Stack-Strukturen muß die Größe zur Compile-Zeit bekannt sein)
Alternative Möglichkeit wäre noch, einen STL-Container zu verwenden, z.B. vector<> oder deque<>
mhh, immer langsam
so weit kenne ich mich leider in c++ noch nicht aus, aber ich werde es mal probieren und sehen, was ich so hinbekomme.ich nehme an, in der variable n steht meine zahl, die ich vorher berechnet habe, also meine anzahl von elementen!?
-
Jörgi schrieb:
(du kannst dynamische Arrays nur auf dem Heap anlegen, für Stack-Strukturen muß die Größe zur Compile-Zeit bekannt sein)
mhh, immer langsam
OK, dann langsam: Wenn du das Array auf dem Stack (also mittels "TYP array[n];") anlegen willst, muß die Anzahl dem Compiler bekannt sein - d.h. das geht nur mit Konstanten. Dynamische Arrays mußt du mittels new anlegen und einem Pointer zuweisen (siehe mein obiger Quelltext) - und am Ende auch daran denken, sie mit delete[] wieder freizugeben.
ich nehme an, in der variable n steht meine zahl, die ich vorher berechnet habe, also meine anzahl von elementen!?
Richtig erkannt

PS: vector<> und deque<> sind Container-Klassen, die das ganze new/delete für dich erledigen können:
vector<TYP> array(n); //...(rechnen auf array) // kein delete nötig
-
du willst wahrscheinlich ein vector<bool>. Das kannst du mit false füllen und dann kannst du die stellen, die du schon bearbeitet hast mit true überschreiben. Übrigens ist vector<bool> eine Templatespezialisierung. Das heißt für dich, dass du keinen Speicherplatz verschwendest (weil bool normalerweise mehr als nur 1 bit belegt)
geloescht