array aus strukturen
-
hallo,
ich habe eine structur der form:
struct struktur{ int var1; int var2; int var3; }ich brauche nun eine ganze menge von diesen strukturen.
nun wollte ich ein array machen und die arrayelemente sollten diese strukturen sein. leider bekomme ich das irgendwie nicht hin.
oder könnte man das auch noch anders lösen?Gruß
Steffen
-
Meinst du so was:
#include <iostream> struct struktur{ int var1; int var2; int var3; }; int main( int argc, char **argv ) { struktur str[3]; return 0; }Wenn die Anzahl der Strukturen fix ist, die du machen musst, dann ist ein Array ok.
Wenn die Anzahl dynamisch ist dann wuerde ich eher eine Liste nehmen (std::list)
-
wenn ich das richtig verstehe habe ich nun ein array mit vier elementen. jedes element ist eine struktur, wie sie vorher angegeben wurde.
wie kann ich denn dann auf die einzelnen variablen in den strukturen zugreifen?
str[1].var1?
-
Du hast im Beispiel ein Array mit 3 Elementen (der Index beginnt bei 0, dann 1, dann 2). 3 Gibt die Anzahl an, wieviele Elemente dein Array haben soll.
Der Zugriff erfolgt so:#include <iostream> struct struktur{ int var1; int var2; int var3; }; int main( int argc, char **argv ) { struktur str[3]; str[0].var1 = 3; std::cout << str[0].var1 << std::endl; return 0; }Das Array enthaelt dann natuerlich 3 mal deine Struktur - verbleichbar mit
int var[3]
das ist ein Array aus 3 Integer-Werten. Das heisst du koenntest deine Struktur auch so schreiben:struct struktur{ int var[3]; };
-
Ah,
vielen Dank!
-
ich weiß nun nicht, wie viele strukturen ich benötigen werde.
so wollte ich die klammern [] leer lassen. dann bekomme ich allerdings ne fehlermeldung. scheib ich eine zahl rein, dann gehts.muss man die zahl direkt angeben oder kann man das auch noch anders lösen, wenn vorher nicht weiß, wievil man davon benötigt?
-
Mit Pointer und dynamische Speicherreservierung.
Struktur *arr; // Pointer arr = new Struktur[anzahl]; // Speicher für <anzahl> Strukturen belegenedit:
Natürlich net vergessen Speicher wieder freizugeben wenn du möchtest:
delete[] arr;
-
wie knn ich denn dann darauf zugreifen?
ich habe z.b folgendes erstelltStruktur *str; // Pointer
str = new Struktur[anzahl]; // Speicher für <anzahl> Strukturen belegennun möchte ich eine struktur füllen
bei str.var1[ii]= 0; (wobei ii z.B. 0) ist gibts probleme. ich steig da noch nicht so ganz dahinter.
-
Das macht man wie zuvor:
#include <iostream> struct Struktur{ int var[3]; }; int main( int argc, char **argv ) { Struktur *str; // Pointer int anzahl = 3; str = new Struktur[anzahl]; // Speicher für <anzahl> Strukturen belegen str[0].var[0] = 3; std::cout << str[0].var[0] << std::endl; delete( str ); return 0; }
-
Die objektorientierte, evtl. elegantere Implementierung würde sich auf die Dynamischen Containerklassen der Standardbibliothek stützen. Schau dir mal das entsprechende Kapitel in deiner C++-Referenz an...