Creation d'un tableau de taille augmentant a chaque iteration d'une boucle
cs_rom12
Messages postés3Date d'inscriptionmercredi 26 mai 2004StatutMembreDernière intervention23 août 2004
-
23 août 2004 à 08:32
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
24 août 2004 à 19:46
Salut,
J'ai besoin de creer un tableau de taille variable... dt la taille n'est pas connue d'avance (d'ou le pb avec malloc).
En fait, j'ai une boucle qui calcule des distances entre des chaines de caracteres, et chaque fois qu'on tombe sur une distance inferieure a un seuil, je veux stocker le resultat ds un tableau de resultats... mais je ne peux pas creer un tableau de taille fixe car il risque de bouffer trop de memoire pour pas grand chose et avec malloc je suis oblige de connaitre le nombre de resultats a l'avance pour alloer la memeoire...
Si qq1 a une idee, ca m'aiderai bien ;)
A+
Rom1 (#2 puisqu' y a deja un #1)
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 24 août 2004 à 19:03
chui pas tt a fait d'accord. accès longs? tant que ca? si tu connais la taille de ton tableau t'as la fonction reserve() qui alloue a ton tableau la taille voulue, apres les accès sont pas vraiment plus longs. a priori ton acces va etre un truc genre en inline :
return *tableau [i]; pour ton accès en lecture, et pour l'écriture, ca va etre la meme chose avec juste une vérif que capacity > size, et pis c'est tt.
donc a priori, tu va perdre quelques rares cycles machines pour tester ca, et c'est tout. donc a partir de la il faut savoir si tu vise la performance, ou si tu vise le confort.....
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 24 août 2004 à 19:06
justement, c'est que je dis, le but premier de vector c'est la facilité d'uttilisation, l'aspect fonctionnel et la securité, tout est codé de facon tres optimisé mais on aura jamais les performances d'un buffer en acces
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 24 août 2004 à 19:10
réallocation du double? en principe c'est juste recopie dans un tableau pouvant contenir 8 éléments de plus que celui actuel il me semble. a vérifier, certes, mais il me semble. tente de faire un vector rempli de par exemple 5000 elements et fait un truc genre
cout << V.size() << ' ' << V.capacity();
(je peux pas tester, a pas compilo sous la main....)
et c'est vrai qu'on aura pas les perf d'un tableau réel, mais en meme temps, passe un tableau multidimensionnel en parametres d'une fonction.....et regarde la différence avec un vector......meme un tableau unidimensionnel c'est la mort a passer en parametres.
Vous n’avez pas trouvé la réponse que vous recherchez ?
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 24 août 2004 à 19:16
ouais c'est pas la question de le passer.
void fonction (int tableau [])
{
cout << tableau [5];
}
int main (void)
{
int tableau [5];
fonction (tableau[]);
return 0;
}
fantastique ca marche.........
et pour les tableaux multidimensionnels, c'est tres gai, tu peux passer que des tableaux dont la deuxieme dimension est de taille constante, donc ta fonction n'est applicable qu'a un tableau, si tu dois faire le meme traitement avec 3 tableaux dont la seconde dimension est de taille différente pour chaque tableau, t'as gagné le droit de réecrire trois fonctions, ou de feinter avec un truc de merde.........pas de pbs avec les vectors...
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 24 août 2004 à 19:18
et ca parce que le compilo sera pas d'accord si tu passe un tableau bidimensionnel sans lui passer la taille de la seconde dimension (ex : le parametre int tableau [][] ne passe pas alors que int tableau [][3] passe a la compilation)
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 24 août 2004 à 19:33
effectivement pr les realloc, merci pr cette verif.
et pr les tableaux.............des ke jen ai un a passer en param, j'evite de les utiliser et je passe aux vectors paske c'est la mort, ou alors a la rigueur
int func (int tableau [][MAX], int tailleX, int tailleY), mais ta solution est pas terrible, tu as pas la taille de ton tableau...sur ce, il est vrai qu'un debat "tableau VS vector : ready, fight!" sera pas super utile, avec ce qui a été dit les gens pourront se faire leur propre opinion s'ils passent ici.......
pour les reallocation, il me semblait pourtant avoir deja fait le test avec gcc, et qu'on avait des granules memoires de 8, je verifierais plus tard pour voir si c'est implémenté differement ou si je me suis tapé une hallu, et je reposterais pr dire (dici deux ou trois jours, pas avant)