Avatar billede mbm2016 Nybegynder
07. november 2009 - 19:38 Der er 7 kommentarer og
1 løsning

Efterligning af ArrayList

Hej Eksperter,

Jeg har nu siddet og bakset en lille klasse sammen som egentligt gør hvad den skal ;)

Problemet ligger i at da jeg har lavet den til en template klasse, bliver jeg nød til at specificerer hvilken type jeg vil lægge ind i listen sådan her:

ArrayList<TYPE> arraylist;

Jeg har før programmeret i C#, og det er der jeg fik inspirationen fra, da jeg lavede denne klasse. Men i C# kan man initialiserer sin arrayliste sådan her, helt uden at specificerer en type:

ArrayList al = new ArrayList();

Jeg håber der er nogle der kan hjælpe med enten at efterligne C#´s "object" klasse eller fortælle mig hvordan jeg gør så jeg kan indsætte elementer af forskellig type i mit array?


På forhånd tusinde tak
Avatar billede mbm2016 Nybegynder
07. november 2009 - 19:56 #1
Hov, jeg var vidst så optaget af at skrive spørgsmålet så jeg glemte at refererer til koden:

http://www.magnusbm.dk/kodenarraylist.html
Avatar billede bertelbrander Novice
07. november 2009 - 20:10 #2
Den eneste måde du kan gøre det på i C++ er ved at gemme alting som void*

Det vil give en del overhead og der vil ikke rigtig være noget type-check.
Så det er tvivlsomt om det er en god ide.
Avatar billede arne_v Ekspert
07. november 2009 - 21:49 #3
Funktionaliteten findes allerede i C++ i form af std::vector:

C# ArrayList -> C++ vector<void*>
C# List<T> -> C++ vector<T>

Hvis du skulle bruge MFC, så har den en stribe C*Array klasser.

wxWidgets har wxArray<T>.

Hvis du bruger C++/CLI kan du bruge .NET klasserne.

O.s.v..

Det er tvivlsomt om det kan betale sig at lave sin egen klasse.
Avatar billede mbm2016 Nybegynder
08. november 2009 - 17:20 #4
Mange tak for svarene begge to ;)

arne_v: Nu lavede jeg den hovedsageligt for at blive bedre til c++ ;) samt at lave nogle funktioner der var lidt mere menneskelige: push_back() -> Add()

Kan i på nogen måde hjælpe mig med at finde ud af om mit pointer array bliver slette i hukommelsen de rette steder osv.

Fordi jeg har prøvet at allokerer et integer array med 250 elementer. og derefter bruge delete []array; funktionen, imens jeg holdt øje med hvor meget hukommelse mit program brugte ifølge Joblisten.

Selve allokeringen kan ses da mit program går fra at bruge 192 kb til 216 kb, men efter kaldet til delete []array står den stadig på 216 kb

Er der nogle der kan forklare mig hvad jeg gør forkert?
Avatar billede arne_v Ekspert
08. november 2009 - 17:36 #5
Formentligt ikke noget.

Dit program allokerer fra C/C++ runtime library og C/C++ runtime library allokerer fra styre systemet.

Det er ret dyrt at allokere og deallokere fra styre systemet, så C/C++ runtime library laver normalt ikke passthrough af kaldene, men vedligeholder sin egen lille lidt af tilgængelig plads.

Derfor passer det du ser meget fint. Hvis du allokerer noget igen så skulle pladsen blive genbrugt.

Du kan iøvrigt ikke måle effektivt med så små data mængder. Gå op i multi MB.
Avatar billede arne_v Ekspert
04. december 2009 - 20:43 #6
Tid at faa afsluttet her?
Avatar billede mbm2016 Nybegynder
05. januar 2010 - 16:51 #7
Jeg deler 50 -> 50 til jer begge
Avatar billede arne_v Ekspert
06. januar 2010 - 02:55 #8
svar
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
Kategori
Kurser inden for grundlæggende programmering

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