Modifier la taille d'un tableau d'objet

istdasklar Messages postés 15 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 30 mars 2011 - 21 juin 2005 à 04:34
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 - 21 juin 2005 à 18:39
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

ricky78 Messages postés 126 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 11 juillet 2006
21 juin 2005 à 08:27
Je te conseille d'aller voir les classe CList ou CArray sur la MSDN, tu trouveras surement reponse à tes questions.

TOCHE
0
darfeuille Messages postés 63 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 25 juillet 2005
21 juin 2005 à 08:31
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
0
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
21 juin 2005 à 11:52
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.
0
darfeuille Messages postés 63 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 25 juillet 2005
21 juin 2005 à 12:25
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
21 juin 2005 à 18:39
istdasklarje t envoyer un mess prive en expliquant les listes chainées ;)
0
Rejoignez-nous