Modifier la taille d'un tableau d'objet

Signaler
Messages postés
15
Date d'inscription
dimanche 6 janvier 2002
Statut
Membre
Dernière intervention
30 mars 2011
-
Messages postés
172
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2009
-
Bonjour,



Je travaille sur de tres grand tableau d'objet, (de l'ordre de 10000 objet par tableau).



Mais, je sais pas trop my prendre, pour agrandir et reduire la taille
d'un tableau ! je me suis donc fait des fonction, mais je perd en
rapidité, et augmente en bug!! Voici ce que j'utilise en ce moment!!



int population=10000;

LIFE * unit[population];



//-----------------

for (i=0;i<population;i++) // initialisé le tableau de LIFE

unit[i]=new LIFE(..);

//----------------



unit = new LIFE (population-1) //ajouter une vie!

population++;



//---------------



for (int i=index;i<population-1;i++) //decaler le tableau

unit[i] =
unit[i+1];
//enleve une vie

population --;



//-----------------



Yaurai pas des librairies qui se charge de tout ca?

Dinon, le coup du decalage de tt le tableau, pour enlever un objet, c'est long, y a pas mieux? Merci




















IDK

5 réponses

Messages postés
126
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
11 juillet 2006

Je te conseille d'aller voir les classe CList ou CArray sur la MSDN, tu trouveras surement reponse à tes questions.

TOCHE
Messages postés
63
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
25 juillet 2005

Connait tu la STL?

Je pense que tu devrais utiliser les classes <vector> ou <list>.



Exemple avec les listes:



#include <list>

using namespace std; //ne l'oublie pas, fais pas comme moi :)

list<mon_objet> ma_liste;



pour ajouter des objets sans s'occuper de la taille :

for(unsigned int i = 0 ; i < 10000 ; i++)

ma_liste.push_back(mon_objet);



pour connaitre sa taille :

taille = ma_liste.size();



pour parcourir :

for(list<mon_objet>::iterator it=ma_liste.begin() ; it != ma_liste.end(); it++)

{

mon_objet = *it;

}



ou sinon t'as les vector, qui s'utilisent comme des tableaux, mais sur lesquels sur peux faire

vector<mon_objet> mon_tableau;



mon_tableau.resize(taille);



Tu trouveras facilement de la doc dessus un peu partout, c'est tres facile a utiliser, et ca marche tres bien
Messages postés
172
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2009

moi je te conseille de faire une liste chainée ;) comme ca tu peux enlever ou ajouter des objet a l infini (enfin facon de parler).
sinon s tu a pas envie d utiliser la stl qui est kan meme bien naze he bien tu redimensionne ton tableau toi meme puis tu copie ton ancien tableau dedan et tu le suprimer (c ce que vector fait je crois mais ac une syntaxe purrave :p pas taper ).
voila amuse toi bien ;)
si tu veux plus d info sur les listes chainées demande je serai heureux de t aider.
Messages postés
63
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
25 juillet 2005

C'est vrai que la syntaxe de la STl peut paraître bizarre au premier
abord, mais ces méthodes sont optimales à condition de ne pas coder
avec les pieds(oui, vector fait des recopies bourrin si on fait plein
de réallocations, sauf si on fais gaffe en codant et qu'on pense a
faire de simples reserve() ) Et de plus on se fait très vite à sa
syntaxe, elle est logique.



la classe list ,qui est justement une liste chainée, te permettra de
faire celà avec une complexité optimale, proprement, et sans problème
de mémoire.



Enfin, chacun fait ce qu'il veut, si tu ne veux pas l'utiliser, je le respecte.
Messages postés
172
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2009

istdasklarje t envoyer un mess prive en expliquant les listes chainées ;)