 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Boris Glawe Guest
|
Posted: Wed Dec 20, 2006 9:29 pm Post subject: Pointeradressen in STL Containern |
|
|
Hallo,
kann ich mich darauf verlassen, dass Obkjekte, die in einem STL
Container, z.B. vector, gepseichert sind, immer die gleiche Adresse haben?
Ich habe ein Team bestehend aus lauter TeamMember. Mein vector speichert
also lauter TeamMember Instanzen.
Ich möchte dem Team aber eine Methode geben, die es ermöglicht, z.B. auf
alle Trainer (vorausgesetzt es gibt mehrere) und damit nur auf eine
Teilmenge des vectors zuzugreifen.
Meine Idee ist, einfach einen zweiten Vector zu definieren, der lauter
Pointer auf alle Trainer speichert.
Ich weiß jetzt aber nicht, was vector intern mit all seinen TeamMember
Instanzen macht. Es könnte z.B. sein, dass sich die Adressen ändern
(z.B. durch umkopieren) wenn man z.B. den TeamMember vector umsortiert.
Kann ich mich also darauf verlassen, dass meine Adressen gültig sind?
Habt ihr andere/bessers Vorschläge für die Modellierung des oben
genannten Sachverhalts?
danke schon mal
Grüße Boris |
|
| Back to top |
|
 |
Falk Tannhäuser Guest
|
Posted: Wed Dec 20, 2006 10:46 pm Post subject: Re: Pointeradressen in STL Containern |
|
|
Boris Glawe wrote:
| Quote: | Hallo,
kann ich mich darauf verlassen, dass Objekte, die in einem STL
Container, z.B. vector, gespeichert sind, immer die gleiche Adresse haben?
|
Beim Löschen von Elementen in einem std::vector werden Zeiger auf
Elemente ab dem Löschpunkt ungültig. Beim Einfügen von Elementen bleiben
auch nur Zeiger auf Elemente vor dem Einfügepunkt gültig, und dies auch
nur dann, wenn keine Speicher-Reallokation erforderlich war, d.h. wenn
die alte Kapazität capacity() größer oder gleich der neuen
Elementeanzahl size() ist.
| Quote: | Kann ich mich also darauf verlassen, dass meine Adressen gültig sind?
Habt ihr andere/bessers Vorschläge für die Modellierung des oben
genannten Sachverhalts?
|
Am besten wäre in diesem Fall wohl std::list - hier bleiben beim
Einfügen alle Zeiger gültig und beim Löschen werden nur Zeiger auf die
gelöschten Elemente ungültig.
MfG
Falk |
|
| Back to top |
|
 |
Falk Tannhäuser Guest
|
Posted: Thu Dec 21, 2006 10:12 am Post subject: Re: Pointeradressen in STL Containern |
|
|
Boris Glawe schrieb:
| Quote: | Ich habe ein Team bestehend aus lauter TeamMember. Mein vector speichert
also lauter TeamMember Instanzen.
Ich möchte dem Team aber eine Methode geben, die es ermöglicht, z.B.. auf
alle Trainer (vorausgesetzt es gibt mehrere) und damit nur auf eine
Teilmenge des vectors zuzugreifen.
|
Noch was anderes: Wahrscheinlich sollten die TeamMember keine
Wertsemantik haben, da sie Objekte außerhalb des Computers
repräsentieren. Das heißt insbesondere, dass sie nicht kopierbar sein
sollten (was hieße es, wenn es 2 Kopien des TeamMembers "Boris" im
Programm gäbe?) und die Container daher nur Zeiger (am besten sicher
sowas wie boost::shared_ptr) speichern sollten. In diesem Falle wäre
auch std::vector als Container geeignet.
MfG
Falk |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|