zugriff auf Objekte in vector <struct&>
-
Mhh habt Ihr dann evtl. ne andere Lösung...
es geht darum zuerst Objecte vom Typ struct object zu generieren, also
object o1, o2, o3;
und diese dann in einer Liste zu speichern um sie durch eine For-Schleife abfragbar zu machen, sodass nicht jedes Objekt immer einzeln angesprochen werden muss.
-
asc schrieb:
free_style schrieb:
vector <object&> objects;
Du kannst keine Referenzen auf Objekte in einen Vektor speichern. Entweder Objekte oder Zeiger, aber keine Referenzen.
Und wie speichere ich Zeiger auf Objekte in einem Vector?
-
vector<objekte*> dein_objekt;
-
Ich steht grad irgendwie auf'm Schlauch...
also ich erstelle mir Objekte z.B. von einem Typ Tier:
struct tier( int gewicht; int beine; // Konstruktor, getter, setter ); tier hase, huhn, pferd;die speichere ich dann in einem vector:
vector <tier> viecher; vector[0] = hase; vector[1] = huhn; vector[2] = pferd;wenn ich jetzt auf ein objekt in viecher zugreife, greife ich dann auf das Originalobjekt zu?
gilt also: hase.gewicht = vector[0].gewicht ?
Danke für euere tips...
-
free_style schrieb:
Mhh habt Ihr dann evtl. ne andere Lösung...
es geht darum zuerst Objecte vom Typ struct object zu generieren, also
object o1, o2, o3;
und diese dann in einer Liste zu speichern um sie durch eine For-Schleife abfragbar zu machen, sodass nicht jedes Objekt immer einzeln angesprochen werden muss.
Wenn du mit Objektkopien einverstanden bist, verwende Objekte im Vector (std::vector<object>). Ansonsten musst du halt mit Zeigern arbeiten (std::vector<object*>).
Wobei ich mich frage warum du die Objekte dann nicht gleich im push_back erzeugst. Ohne gleich auf weitere vector-Möglichkeiten einzugehen:
//... int main() { std::vector<object> objectList; for(int i=0; i<10; ++i) { objectList.push_back(object()); // Hinzufügen eines neuen "object" objectList[i].x = i; } int xSumme = 0; for(int i=0; i<10; ++i) xSumme += objectList[i].x; }
-
Du greifst auf eine Kopie deiner Objekte zu.
Dein Code würde so wie er da steht aber auch nicht funktionieren, da dein Vektor noch die Länge 0 hätte. Entweder du gibst ihm schon im Konstruktor eine Länge mit, oder du fügst deine Objekte mit push_back ein. Dann würde die Länge automatisch angepasst.vector <tier> viecher; // jetzt werden deine Objekte in den Vektor kopiert. vector.push_back(hase); vector.push_back(huhn); vector.push_back(pferd);
-
free_style schrieb:
wenn ich jetzt auf ein objekt in viecher zugreife, greife ich dann auf das Originalobjekt zu?
Nein, std::vector arbeitet wie jeder Standardkontainer mit Kopien (Daher auch die Anforderung das Objekte kopierbar sein müssen).
-
asc schrieb:
Nein, std::vector arbeitet wie jeder Standardkontainer mit Kopien (Daher auch die Anforderung das Objekte kopierbar sein müssen).
Etwas genauer: Wegen der Kopien in den Containern müssen die Objekte copy-konstruierbar sein. Bei vector und deque müssen sie zusätzlich noch copy-assignable sein, da diese intern die Objekte "herumkopieren" können.
-
SUPER !!!
Vielen Danke euch allen - funktioniert alles!!
-
Nur so am Rande:
free_style schrieb:
struct tier( int gewicht; int beine; // Konstruktor, getter, setter );Ich würde dir raten, die Member
privatezu machen, sonst verfehlen die Getter und Setter ihren Sinn. Oder du machst gleich ein C-Style-POD. Und Block-Klammern sind eigentlich geschweift.