Vector mit "struct"-Elementen füllen
-
Mit Normalen Werten funktioniert der Vektor wunderbar:
std::vector<int> int_vect(16); for( int i=0; i < (int)(int_vect.size()); i++ ){ int_vect[i] = (double)i; } int size = int_vect.size(); for( int i=0; i<size; i++ ){ cout << int_vect[i] << " "; }Ich brauche das selbe wie oben aber mit einem selbst definierten Typ machen.
Wie kann ich einem Vektor mit einem selbst definierten Typ Werte zuweisen?
Hab mir das so vorgestellt:struct MyStructure{ // mein datenTyp int index; double value; };std::vector<MyStructure *> vect(16); // baue Vektor mit 16 Elementen vom Typ MyStructure MyStructure *inhalt = new MyStructure; for( int i=0; i<(int)(vect.size()); i++ ){ inhalt ->index = i; inhalt ->value = 9.999; vect[i]= inhalt; }Funktioniert aber nicht. bzw ich kann die elemente nicht mehr auslesen.

Kann mir jemand helfen?
Das ist sicher ganz einfach, hab aber noch nie mit Vektoren gearbeitet.Gruß,
Stefan
-
Du erzeugst einen vector von Pointern, und läßt jeden einzelnen Pointer auf das gleiche Objekt zeigen. Du erzeugst ja auch nur ein Objekt, wo du immer wieder die Werte änderst. Ich glaube nicht das das ist was du willst.
Gruß
Entyl Sa
-
Du speicherst Pointer auf ein Objekt 16 mal ?
Schreib das so :std::vector<MyStructure *> vect(16); MyStructure *inhalt = 0x0; for(int i=0; i < (int)(vect.size()); ++i) { inhalt = new MyStructure; inhalt ->index = i; inhalt ->value = 9.999; vect[i]= inhalt; }[edit]Ahhm, da war schon jemand ![/edit]
mfg BlueShift
-
warum zeiger??
Mach doch lieber in die struct nen Ctor rein und dann alles schön by value machen:
vec.push_back(myStruct(3, 99.9));
-
Danke euch!
dumm von mir
Hier das ganze noch mit Ausgabe für andere Anfänger:
std::vector<MyStructure *> vect(16); MyStructure *inhalt = 0x0; for(int i=0; i < (int)(vect.size()); ++i) { inhalt = new MyStructure; inhalt ->index = i; inhalt ->value = 9.999; vect[i]= inhalt; } int size = inhalt.size(); for( int i=0; i<size; i++ ){ cerr << "index:" << (inhalt [i])->index << " "; cerr << "value:" << (inhalt [i])->value << " "; }@BlueShift: ist 0x0 das selbe wie NULL?
@Shade Of Mine: was ist ein "Ctor" ??
aber den aufbau mit push_back finde ich nicht so gut. Da Vectoren eigentlich nur für feste Anzahlen von Elementen effizient sind. Ansonsten nimmt man meines wissens soweit wie möglich listen.Gruß,
Stefan
-
StefanXP schrieb:
ist 0x0 das selbe wie NULL?
0x0 = 0 = NULL nur andere Schreibweisen.
StefanXP schrieb:
was ist ein "Ctor" ??

Ctor = Konstruktor
Das würde bei dir etwa so aussehen:struct MyStructure{ // mein datenTyp MyStructure(int i, double v):index(i),value(v){} //Konstruktor (Ctor) int index; double value; }; int main() { std::vector<MyStructure *> vect(16); for( int i=0; i<(int)(vect.size()); i++ ){ vect[i] = new MyStructure(i, 9.999); } for(i=0; i<(int)(vect.size()); i++ ){ std::cout<<vect[i]->index<<" "<<vect[i]->value<<endl; } return 0; }Gruß
Entyl Sa
-
Das ist ja absolut Geil!!!!
*freu*
Danke!
Das ist ja noch vieeel besser als ich es anfangs geplant hatte!