C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Pointeradressen in STL Containern

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Boris Glawe
Guest





PostPosted: Wed Dec 20, 2006 9:29 pm    Post subject: Pointeradressen in STL Containern Reply with quote



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





PostPosted: Wed Dec 20, 2006 10:46 pm    Post subject: Re: Pointeradressen in STL Containern Reply with quote



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





PostPosted: Thu Dec 21, 2006 10:12 am    Post subject: Re: Pointeradressen in STL Containern Reply with quote



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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.