dynamische struct
-
hallo zusammen,
eine statische struktur ist ja ziemlich einfach in c++:
struct test { int test1; int test2; };
aber ist es auch möglich eine dynamische struktur zu erzeugen, so dass ich je nach belieben mehrere variablen in der struktur während der laufzeit des programms erzeugne kann?
ich meine damit folgendes:
struct test { //Alle diese Elemente zur Laufzeit erzeugen int test1; int test2; //Alle diese Elemente zur Laufzeit erzeugen };
könnte dann auch mal so aussehen:
struct test { //Alle diese Elemente zur Laufzeit erzeugen int test1; int test2; int test3; int test4; int test5; int test6; //Alle diese Elemente zur Laufzeit erzeugen };
gruß anno
-
std::vector?
-
ja, das ist mir klar. vectoren benutze ich auf jeden fall.
das ist aber ein anderes problem.
wenn ich eine tabelle hätte wären die vectoren meine zeilen, wie in einer db, wenn ein neuer datensatz hinzukommt und meine struktur meine felder (spalten).
ich würde es jetzt aber gerne so machen, dass ich die struktur während der laufzeit dynamisch erweitern kann.
also in einem vector gibt es dann immer die gleiche struktur.
vector => struct test (soll im kompletten vector die gleiche struktur sein).
außer wenn ich mein programm starten soll danach eine andere struct übergeben werden.
gruß anno
-
anno schrieb:
das ist aber ein anderes problem.
Dann macht dein Beispiel nicht hinreichend deutlich, was du erreichen willst.
anno schrieb:
ich würde es jetzt aber gerne so machen, dass ich die struktur während der laufzeit dynamisch erweitern kann.
also in einem vector gibt es dann immer die gleiche struktur.
Nimm doch einen std::vector <std::vector <int> >.
-
also nochmal.
sagen wir mal ich habe ein "datum" und eine "uhrzeit".
so!
wobei der vector gerade eher unwichtig ist.
mir geht es jetzt nicht um komplette listen. und zwar nur speziell um eine einzelne struktur, dass man das problem auch versteht.
wenn ich nun beides in einer struct speichere sieht das ja folgender maßen aus.
struct test {
string date;
string time;};
das ist ja eine ganz normale struktur.
ich möchte eben eine struktur verwenden, da es mit dieser suaber zu programmieren ist.so dann mal weiter...
wenn ich jetzt sage, ich will keine statische struktur, die immer die selbe (im inneren aufbau) nach dem compilieren ist, sondern eine die ich zur laufzeit neu aufbauen kann.
bsp.:
ein programmstart:
hier soll die struktur dann eben so aussehen.struct test { string date; string time; int zahl; };
und beim nächsten programmstart
struct test { string date; string time; int zahl; char zeichen; };
das ganze eben dynamische, so dass ich die struktur bei jedem neustart des programms so zu sagen neu erstellen kann.
gibt es da nun eine möglichkeit oder nicht?
-
Hallo
Um es kurz zu machen : Es gibt in C/C++ keine Möglickeit Typen zur Laufzeit zu verändern. Alle Typen müßen schon beim Kompilieren fest definiert sein.
Die einzige Möglichkeit der Flexibilität sind Arrays/Listen/Maps für die Menge und Polymorphie für die Struktur der Daten.bis bald
akari
-
na das sit doch mal eine klare antwort.
danke.
dann weiß ich wie ich mein problem angehen muss.
gibt es bei containern irgendeine begrenzung der elemente?
-
Hallo
Theoretisch das Maximum von std::size_t, praktisch (weil viel kleiner als die theortische Grenze) dein freier Arbeitsspeicher.
bis bald
akari
-
anno schrieb:
gibt es bei containern irgendeine begrenzung der elemente?
Ich würde versuchen rauszukriegen, wie in den Containern size_type definiert ist.
-
anno schrieb:
das ganze eben dynamische, so dass ich die struktur bei jedem neustart des programms so zu sagen neu erstellen kann.
Wie würdest du denn in deinem Programm auf Felder der Struktur zugreifen wollen, von denen du gar nicht weißt, wie sie heißen, ob sie existieren etc.?
anno schrieb:
gibt es da nun eine möglichkeit oder nicht?
Einige. Wenn du an PHP oder so etwas ähnliches denkst, kommst du am ehesten mit einer std::map <String, TVariant> hin. Ansonsten ist es mit entsprechendem Riesenaufwand auch machbar, eine Delphi- oder C++Builder-Klasse zur Laufzeit zu modifizieren - aber ich glaube kaum, daß das ein guter Lösungsansatz wäre.