Vektoren von Objekten einer Klasse mittels Iterator ausgeben ! GELÖST !
-
Folgendes Programm soll von einer Klasse einen Vektor von Objekten anlegen und diese anschließend ausgeben.
Bei der Ausgabe hapert es, so müßten z.B. die Objekteigenschaften bestimmt mit aufgeführt werden, leider weiß ich nicht, wie das geht.
Kann mir da jemand helfen?#include <iostream> #include <string> #include <vector> using namespace std; //Klasse einrichten class Spieler { //Eigenschaften public: string Nachname; string Vorname; }; int main() { //Vektor von Objekten anlegen vector<Spieler>vieleSpieler; //Objekt der Klasse anlegen Spieler a; //Eingabe der Objekteigenschaften cout<<"Nachname: "; cin>>a.Nachname; cout<<"Vorname: "; cin>>a.Vorname; //Objekt an das Ende des Vektors anfügen vieleSpieler.push_back(a); //Iterator einrichten vector<Spieler>::iterator pos; //Ausgabe mittel Iterators for(pos=vieleSpieler.begin();pos!=vieleSpieler.end();++pos) { cout<<*pos<<endl; } return 0; }
-
Es gibt meistens mehrere Ansätze:
Die Ausgabe einzelner Attribute des Spielers oder man definiert wie ein Spieler ausgegeben werden soll:
#include <iostream> #include <string> #include <vector> using namespace std; //Klasse einrichten class Spieler { //Eigenschaften public: string Nachname; string Vorname; }; std::ostream& operator<<(std::ostream& str, const Spieler& spieler){ return str << spieler.Vorname << " " << spieler.Nachname; } int main() { //Vektor von Objekten anlegen vector<Spieler>vieleSpieler; //Objekt der Klasse anlegen Spieler a; //Eingabe der Objekteigenschaften cout<<"Nachname: "; cin>>a.Nachname; cout<<"Vorname: "; cin>>a.Vorname; //Objekt an das Ende des Vektors anfügen vieleSpieler.push_back(a); //Iterator einrichten vector<Spieler>::iterator pos; //Ausgabe mittel Iterators for(pos=vieleSpieler.begin();pos!=vieleSpieler.end();++pos) { cout<<pos->Vorname<<' '<<pos->Nachname<<endl; cout<<*pos<<endl; } return 0; }Gruß,
XSpille
-
Danke
, Ausgabe mittels ostream sehe ich zum ersten Mal. 
Wenn es noch einen Spieler b gäbe, wie würde man denn dann zwischen beiden bei der Ausgabe unterscheiden?
-
redrew99 schrieb:
Danke
, Ausgabe mittels ostream sehe ich zum ersten Mal. 
Wenn es noch einen Spieler b gäbe, wie würde man denn dann zwischen beiden bei der Ausgabe unterscheiden?
Den ostream siehst du sicherlich nicht zum erstem mal... std::cout ist ein std::ostream

Wenn dein Spieler b ebenfalls vom Typ der Klasse Spieler ist, gar keinen...
Ansonsten passen sie ja auch nicht in den gleichen vector.Bei der Variante mit der zentralen Definition der Spielerausgabe, wird halt jedes Objekt auf diese Art und Weise ausgegeben. Falls es mal anders ausgegeben werden soll, dann kann man wieder einzelne Attribute ausgeben.
-
Ja
habe probeweise mal einen zweiten Spieler b mit eingefügt und ich muss sagen, daß ist ja richtig Klasse
, denn alle Objekte werden anstandslos ausgegeben.Ich glaube, C++-Programmierer sind alle stinkfaul, sonst würde die Sprache nicht soviel Komfort hergeben

-
XSpille schrieb:
Den ostream siehst du sicherlich nicht zum erstem mal... std::cout ist ein std::ostream

Ok, aber
std::ostream& operator<<(std::ostream& str, const Spieler& spieler) { return str << spieler.Vorname << " " << spieler.Nachname; }sagt mir leider gar nichts. Aber auf jeden Fall eine interessante Möglichkeit.