push_back - gezielter Zugriff auf Elemente eines Klassenvektors möglich?
-
#include <vector> using namespace std; class foo { public: foo(int anzahl = 0,int geld=0) : Anzahl(anzahl),Geld(geld) {} int Anzahl,Geld; }; int main() { vector<foo>test; for(size_t i=0,z=0;i<10;++i,++z) if(z!=5) test.push_back(foo(50,70)); }test.push_back(foo(50,70)) speichert ja den ersten Wert im ersten Element, usw.
Gibt es eine Möglichkeit, daß man nur bestimmte Elemente ansprechen kann?
also z.B. nur das zweite?
-
Wie meinst du das? So?
std::vector<int> v(100); // 100 Elemente v[1] = 5;
-
redrew99 schrieb:
test.push_back(foo(50,70)) speichert ja den ersten Wert im ersten Element, usw.
Gibt es eine Möglichkeit, daß man nur bestimmte Elemente ansprechen kann?
also z.B. nur das zweite?push_back spricht nicht irgendwelche vorhandenen Elemente an, sondern erzeugt neue Elemente. Vor deinem ersten push_back gibts garkeine Elemente im vector, also kannst du auch schlecht das zweite Element ansprechen. Insofern macht die Frage so wie du sie gestellt hast nur wenig Sinn. Was willst du erreichen?
-
Du kannst mit insert, wenn du weißt dass es soundsoviele Elemente gibt, auch sowas machen:
myVec.insert(myVec.begin() + 4, 8);///Vor dem fünften Element Acht einfügen (sind RA-Iteratoren)
-
pumuckl schrieb:
push_back spricht nicht irgendwelche vorhandenen Elemente an, sondern erzeugt neue Elemente. Vor deinem ersten push_back gibts garkeine Elemente im vector, also kannst du auch schlecht das zweite Element ansprechen. Insofern macht die Frage so wie du sie gestellt hast nur wenig Sinn. Was willst du erreichen?
Wie kann ich gezielt das zweite Element Geld ansprechen, z.B.
myVec.insert(myVec.begin() + 4, 8);spricht nur das Element Anzahl an, wie kann ich aber das Element Geld ansprechen?
-
Liest du die Beiträge hier überhaupt?

-
Ich glaube du verstehst da etwas grundlegend nicht, deswegen hast du auch Probleme deine Frage richtig zu stellen.
Grundsätzlich hat ein vector<foo> nur Elemente vom typ foo. Wie man da etwas anderes anspricht außer foo ist eine frage die eigentlich nichts mit demm vector zu tun hat. (Da wird also auch nicht "Anzahl" angesprochen - das ist ja kein foo)
Wenn du "Geld" eines speziellen foos ansprechen willst, holst du dir erst das foo, z.B.:
myVec[2]; //das foo an der Stelle 3 von myVecUnd, sobald du das foo hast, holst du dir von diesem foo "Geld":
myVec[2].Geld; //hol dir "Geld" von dem foo, das an der Stelle 3 von myVec steht
-
Sup schrieb:
myVec[2].Geld; //hol dir "Geld" von dem foo, das an der Stelle 3 von myVec stehtVorausgesetzt, du hast Geld in foo public definiert und damit alle Regeln des guten Designs und der Kapselung verletzt. Der Eingangspost lässt das vermuten - vielleicht wäre ein gutes buch angebracht, das dir ein wenig über objektorientierte Programmierung und Design beibringt.
-
So dürfte es besser sein:
#include <vector> #include <iostream> using namespace std; class foo { public: foo(int anzahl = 0,int geld=0): Anzahl(anzahl),Geld(geld) {} void setAnzahl(int anzahl){Anzahl=anzahl;} void setGeld(int geld){Geld=geld;} int getAnzahl()const {return Anzahl;} int getGeld()const {return Geld;} private: int Anzahl; int Geld; }; int main() { vector<foo>test; for(size_t i=0,z=0;i<10;++i,++z) { if(z!=5) { test.push_back(foo(50,70)); } } }