Creation d'un tableau de taille augmentant a chaque iteration d'une boucle

cs_rom12 Messages postés 3 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 23 août 2004 - 23 août 2004 à 08:32
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 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)

33 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
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.....
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 août 2004 à 19:04
a chaque debordement de capacité reallocation du double, ca peux devenir genant en terme d'espace occupé
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
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
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
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.
0

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

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 août 2004 à 19:11
ben si, tu le passe par reference

pour capacity et size je verifi
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
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...
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
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)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 août 2004 à 19:23
je suis d'accord, je repete, quand la taille est connue ou fixe, pas vector

pour les impresions ca donne ca, ce qui verifie qu'il reallouebien le double à chaque fois

1 1
2 2
3 4
4 4
5 8
6 8
7 8
8 8
9 16
10 16
11 16
12 16
13 16
14 16
15 16
16 16
17 32
18 32
19 32
20 32
21 32
22 32
23 32
24 32
25 32
26 32
27 32
28 32
29 32
30 32
31 32
32 32
33 64
34 64
35 64
36 64
37 64

je suis d'accord avec tout ce que tu dis, pas la peine de transformer ce topic en un debat steril ;)

int func( (&tab)[][MAX] ) c'est mieux
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 août 2004 à 19:27
j'utilise moi meme std::vector des que j'en ai l'occasion, ca simplifie enorment le code
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
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)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 août 2004 à 19:40
pour info j'ai tester avec gcc version 3.2 (mingw special 20020817-1)
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
24 août 2004 à 19:42
oki......metonne tt ca. bon bah javais du me taper un hallu....merci djl pr ces precisions
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 août 2004 à 19:46
c'est moi qui te remerci, jusqu'ici je croyais qu'un vector c'etait une liste o_O
0
Rejoignez-nous