Preben wrote:
> en debugging af problemet viste sig at std::vector flytter rundt på
> objekterne i hukommelsen efter sidste push_back....
> Hvorfor i hele hulen flyttes objekterne? Det kan da ikke være særlig
> optimalt, når vi snakker om at flytte dem fysisk?
>
> En god forklaring ønskes. Det har kostet en hel dags arbejde og lidt til.
Jeg ved ikke om jeg kan tilbyde en god forklaring, men,
Hver gang du kalder push_back kan du resikere at den flytter rundt på
objekterne i din vector, dvs. alle referencer du måtte have til objekter
i vectoren vil være invalide. (Som en sidebemærkning kan det noteres at
det ikke vil ske hvis du kalder pop_back.)
I praksis er en vector arrangeret som ét stort hukommelses område, hvis
den får brug for mere plads vil den allokere mere plads og flytte de
eksisterende elementer over i den nye plads.
Det sker for at få en vector til at opføre sig som et array.
I nogle tilfælde vil den reservere plads til et antal elementer
af gangen for at undgå at skulle flytte alle elementer på én gang,
men det kan man ikke stole på, og man ved ikke hvornår den har
flyttet, kun hvornår det måske er sket.
Hvis det er et problem kan du reservere plads til alle elementer inden
du starter, bruge en vector af pointere, eller du kan bruge en
std::list. I stedet for at gemme pointere til elementer i din
vector (_goal og _source) kunne du bruge index'er.
--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel