Avatar billede Slettet bruger
23. oktober 2013 - 12:40 Der er 6 kommentarer og
1 løsning

Slet et bestemt element i en vector

Hej,

Jeg har lidt problemer med at slette et element i en vector, som er af typen vector<Person *>. Jeg kan finde pladsen i vector, hvor det element som skal slettes ligger.
Avatar billede lars31415 Nybegynder
23. oktober 2013 - 12:50 #1
Hvis du mener du _ikke_ kan finde elementet så kik her
http://www.parashift.com/c++-faq/find-obj-in-stl-ptr-container.html
Avatar billede Slettet bruger
23. oktober 2013 - 15:29 #2
Jeg kan godt finde elementet (nok ikke helt så smart som i dit link). Men problemet opstår når jeg så vil slette det element som jeg fra fundet, fra listen.
Avatar billede arne_v Ekspert
23. oktober 2013 - 15:38 #3
Er det ikke hvad erase metoden goer?

Bemaerk at erase i vector er en dyr operation.
Avatar billede Slettet bruger
23. oktober 2013 - 17:21 #4
Det er/var erase som skulle bruges. Jeg fik det til at lykkes vha at oprette en iterator og kalde erase med den, ved det object som skulle slettes.

Men ja du har ret i at erase gør at hele array bliver flyttet :(
Avatar billede arne_v Ekspert
23. oktober 2013 - 17:27 #5
hvis du ikke har behov for hurtig access by index, saa er list<Person *> en mulighed
Avatar billede Slettet bruger
23. oktober 2013 - 19:22 #6
Ja det er en mulighed, men tror muligvis at jeg ændre det til et map da jeg ofte kommer til at skulle finde objecterne på cpr nr. og så vil jeg bruge det som nøgle. Det gør ikke noget hvordan det kommer ud, når det skal udskrives.

Listen var også en mulighed da hastighed ikke er super vigtigt, da listen aldrig når mere end 100 elementer. Så det er sku nok same-same :)
Avatar billede segmose Nybegynder
23. oktober 2013 - 23:07 #7
Med 1000 elementer er en vector med pointer relativ billig at slette et element da al kopiering foregår i cache med streaming fra/til RAM, en list er en dyr fornøjelse mm. man er sikker på at hele listen altid er i RAM, da et miss koster ~200 cycles og dem vil der være mange af i en så lang liste.
Et map er godt, et hashmap er bedre i de fleste tilfælde, dog skal man lige overveje hvordan man vil tilgå det og lave sin hash funktion derefter, default er pointer, det smarte valg er at lave den på det du søger efter (mm. du ved hvad pointer værdien er :))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester