Vector-Container
-
Hallo,
ich bin gerade dabei C++ mit "Microsoft Visual 2005" zu erlernen und stehe vor meinem ersten Problem mit Vektoren.
Ich möchte einen Vektor mit Persondaten füllen.
Ich habe als erstes eine Struktur mit den Variablen Name, Alter und Telefon definiert.struct perondaten{char name[]; int alter; char telefon[];};Person1 und person2 sind vom Typ persondaten, die ich dann im Vektor ablegen möchte.
vector<persondaten> freunde; persondaten={"Hans Peter", 23, "08976543210"}; freunde.push_back(person1); persondaten={"Stefan", 21, "062123456789"}; freunde.push_back(person2);stimmt das so, oder?
mit freunde[i] sollte man auf die gespeicherte Daten der Person_i zugreifen, ja?
Jetzt meine Frage: wie kann ich jetzt "NUR" auf ein ein bestimmtes Atribut einer Person zugreifen, wie z.B die telefonnummer der zweiten Person?
Danke im voraus.Gruß.
PS: Ich habe vorhin den Thread aus Versehen im falschen Forumbereich geschrieben. sorry
-
Denke das Forum passt schon, ist keine MSVC-spezifische Frage.
Auf die telefonnummer kannst du bei "freunde[123]" genau so zugreifen wie wenn "freunde[123]" eine Instanz von "perondaten" wäre, also mittels "freunde[123].telefonnummer". Lesend und schreibend, oder falls "freunde" const ist halt nur lesend.
Und mit dem "char name[]" wirst du nicht glücklich werden - wundert mich dass das überhaupt geht. Macht nur am Ende einer POD struct Sinn, und auch nur dann wenn man die in passender Grösse mittels malloc/new char[] (+ cast) anlegt.
Weiss auch garnicht ob das in Standard-C++ geht.Verwende lieber nen std::string (gut), oder ein Array fixer Grösse, also name[50] oder was auch immer (IMHO meistens weniger gut).
Für "char telefon[]" gilt natürlich dasselbe wie für "char name[]".
-
Plotzenhotz schrieb:
Und mit dem "char name[]" wirst du nicht glücklich werden - wundert mich dass das überhaupt geht. Macht nur am Ende einer POD struct Sinn, und auch nur dann wenn man die in passender Grösse mittels malloc/new char[] (+ cast) anlegt.
Weiss auch garnicht ob das in Standard-C++ geht.nein mit char name[] wird man in der tat nicht glücklich da es als unvollständiger typ angesehen wird und es sollte auch nicht funktionieren. auch wenn es einem char* am nächsten kommt.
es macht in dieser art auch nicht am ende eines struct sinn, wobei dies bereits ein pod struct ist.
auch ist ein foo[] in initialform statisch und man wird wohl auch mit einem cast nicht glücklicher werden.
-
verwende lieber eine klasse mit konstruktor und metthoden.
-
@Cpt. Tanga:
also sowas wiestruct Foo { int blubb; char daten[]; };ist in C sehr üblich. Findet man oft auch als "char daten[1];". Und es macht Sinn, weil es nämlich kein Zeiger ist, sondern ein "offenes Array" - zumindest wenn man es so verwendet

Wenn man für eine Instanz von "Foo" nämlich "sizeof(Foo) + dataSize" alloziert, dann kann man die Daten schön nach "daten" reinschreiben.
Also ich sollte sagen es macht "Sinn", denn man kann damit ein bestimmtes Ziel erreichen. Dass man es in C++ auch besser machen kann ist dann wieder eine andere Sache.
-
gibts in c++ nicht mehr und ja da gibts auch deutlich bessere wege..
naja gut .. in c kann man ja auch noch sowas wie foo vec[0]; schreiben stimmt warum auch nicht *lach*