Article View: be.comp.programming
Article #13401Re: C++, object: dynamische array.
From: Bart.Vanhauwaert
Date: Tue, 24 Jul 2001 17:31
Date: Tue, 24 Jul 2001 17:31
80 lines
3628 bytes
3628 bytes
SpaceRunner <xspacerunner@skynet.be> wrote: > Bij een preprocessor kunnen namelijk identifiers gedefinieerd worden en > die moet ik dus tijdelijk bijhouden. Ik heb besloten die identifiers met > eventuele waarden in een 'dynamische array' te steken. Die 'dynamische > array' is eigenlijk een object die zich als een array gedraagt en slaat > andere objecten (type class) op, geen strings of andere atomaire types. > Intern werkt de 'array' voorlopig met een gelinkte lijst, maar echt > goede performantie is het natuurlijk niet, zeker wanneer er zeer veel > objecten zich in de 'array' bevinden (maximaal 50.000 objecten) Gebruik std::vector. Er is geen enkele reden om in dit geval zelf die gegevensstructuur te gaan schrijven. #include <vector> /* Als je rechtstreeks objecten wil opslaan, zorg wel voor deftige copy/assignment/destructrors als je objecten meer zijn dan PODs */ std::vector<Identifier> AllIds; /* Als je pointers naar objecten wil opslaan */ std::vector<Identifier*> AllPtrIds; > Heeft iemand soms een idee? De 'dynamische array' moet de volgende > methodes ondersteunen: > - add(Object): voeg object toe aan het einde van de 'array'. AllIds.push_back(SomeIdentifier); AllPtrIds.push_back(new Identifier(...)); Beide hebben tijdscomplexiteit O(n), n elementen in de vector. O(1) als je voldoende space gereserved hebt op voorhand. > - add(Object, int): voeg object toe op aangeduide plaats. AllIds.insert(AllIds.begin()+Pos, SomeIdentifier); AllPtrIds.insert(AllPtrIds.begin()+Pos, new Identifier(...)); Beide hebben tijdscomplexiteit O(n), n elementen in de vector > - remove(int): verwijder object op die plaats. AllIds.erase(AllIds.begin()+Pos); AllPtrIds.erase(AllPtrIds.begin()+Pos); Beide hebben tijdscomplexiteit O(n), merk op dat de tweede versie het object NIET zal deleten. > - get(int): geef het object terug dat zich op die plaats bevindt. AllIds[Pos] AllPtrIds[Pos]; Tijdscomplexiteit O(1) > worden, alleen via die methodes. Ook moet objecten alleen via positie > nummer kunnen benadert worden: dit om verschillende soorten objecten in > de 'array' te kunnen steken. Als je dat wil, moet je natuurlijk pointers in je array steken (de tweede vorm dus) std::vector<BaseIdentifier*> Ids; Ids.push_back(new VarIdentifier(...)); Ids.push_back(new FuncIdentifier(...)); > Als het niet echt duidelijk is, vraag maar en ik geef wat extra uitleg. Zoek op het web naar The Standard Template Library. Of investeer in een zeer goed boek over het onderwerp zoals The C++ Standard Library -- A Tutorial and Reference, Nicolai M. Josuttis ISBN : 0-201-37926-0; Adisson Wesley Longman. Te verkrijgen in de betere boekhandel. cu bart -- http://www.irule.be/bvh/
Technical Details
Message-ID:
<ndbkj9.78q.ln@10.0.0.2>Path:
arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!sn-xit-02!supernews.com!news.tele.dk!194.25.134.62!newsfeed00.sul.t-online.de!t-online.de!skynet.be!louie!not-for-mailReferences:
<3B5D9479.7020106@skynet.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,341bfcdb6a0f55c4
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2001-07-24 12:16:18 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!sn-xit-02!supernews.com!news.tele.dk!194.25.134.62!newsfeed00.sul.t-online.de!t-online.de!skynet.be!louie!not-for-mail
Sender: - <bvh@ns1.irule.be>
From: Bart.Vanhauwaert@nowhere.be
Subject: Re: C++, object: dynamische array.
Newsgroups: be.comp.programming
References: <3B5D9479.7020106@skynet.be>
User-Agent: tin/1.4.4-20000803 ("Vet for the Insane") (UNIX) (Linux/2.2.17-21mdksecure (i686))
Date: Tue, 24 Jul 2001 19:31:35 +0200
Message-ID: <ndbkj9.78q.ln@10.0.0.2>
Lines: 80
NNTP-Posting-Host: 194.78.202.248
X-Trace: 996002157 reader1.news.skynet.be 4566 194.78.202.248
X-Complaints-To: abuse@skynet.be