🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #13401

Re: C++, object: dynamische array.

#13401
From: Bart.Vanhauwaert
Date: Tue, 24 Jul 2001 17:31
80 lines
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-mail
References: <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