A voir également:
- Tableau de taille variable en c++
- Tableau croisé dynamique - Guide
- Comment réduire la taille d'un fichier - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
3 réponses
pouf, j'ai deux soluces:
surdimmensionnement ou liste:
struct{ de element et pointeur de struct}
Sinon, je vois pas (ou je ne me rappel plus, ca fait quand meme longtemps que je n'y ai pas touché à ce genre de dynamique).
pour add: suffit de faire un
p.next = (truc*)malloc(sizeof(truc));
p.next.val=elmt;
p.next.next = NULL;
heu malloc et new, c'est pareil sauf que c'est du C
tiens, ca peut aussi introduire une question:
Est-ce que l'OS fournit un bloc de memoire entier ou partitionné lors d'un appel à new?
Une remarque: quand tu tapes:
double * tab=new doube[taille];
ca revient à taper:
double tab[taille]; , sauf que tu fait appel à un truc de plus: new (pas bien pour l'allocation et portée), donc essai
double * tmp;
//traitement
tmp = new double[taille];
Mais bon, cette methode est pas terrible puisque si tu veux en changer la taille, il faut copier tous tes elements pour les remettre dans le nouveau tableau. Donc: complexite n
D'autant plus qu'il y aura,; à un moment donné deux instance de tableau à chaque modification. Entassement des free, new et copy, c'est plutot nul (et il faut bien penser à les effacer!!!) , mais bon, je peux me tromper! :)
surdimmensionnement ou liste:
struct{ de element et pointeur de struct}
Sinon, je vois pas (ou je ne me rappel plus, ca fait quand meme longtemps que je n'y ai pas touché à ce genre de dynamique).
pour add: suffit de faire un
p.next = (truc*)malloc(sizeof(truc));
p.next.val=elmt;
p.next.next = NULL;
heu malloc et new, c'est pareil sauf que c'est du C
tiens, ca peut aussi introduire une question:
Est-ce que l'OS fournit un bloc de memoire entier ou partitionné lors d'un appel à new?
Une remarque: quand tu tapes:
double * tab=new doube[taille];
ca revient à taper:
double tab[taille]; , sauf que tu fait appel à un truc de plus: new (pas bien pour l'allocation et portée), donc essai
double * tmp;
//traitement
tmp = new double[taille];
Mais bon, cette methode est pas terrible puisque si tu veux en changer la taille, il faut copier tous tes elements pour les remettre dans le nouveau tableau. Donc: complexite n
D'autant plus qu'il y aura,; à un moment donné deux instance de tableau à chaque modification. Entassement des free, new et copy, c'est plutot nul (et il faut bien penser à les effacer!!!) , mais bon, je peux me tromper! :)
grdTonioHardware
Messages postés
43
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
22 avril 2007
12
16 juil. 2004 à 13:33
16 juil. 2004 à 13:33
Slt Pom !!
Si tu veux faire des tableau dynamique utilise la STL ( Standart Template Library ) et utilise des listes, vecteur ou deque, etc ...
Chacune à ses caractéristiques au niveau des itérateurs ( = pointeur sur un objet de ton tableau ) ou vitesse de recherche d'un élément ( du à ses itérateurs ), etc ...
Et avec ses tableau dynamique tu peux ajouter des élément en retirer etc ... comme tu veux le faire pour ton tableau.
@++ !!
PS:
http://www.sgi.com/tech/stl/
Si tu veux faire des tableau dynamique utilise la STL ( Standart Template Library ) et utilise des listes, vecteur ou deque, etc ...
Chacune à ses caractéristiques au niveau des itérateurs ( = pointeur sur un objet de ton tableau ) ou vitesse de recherche d'un élément ( du à ses itérateurs ), etc ...
Et avec ses tableau dynamique tu peux ajouter des élément en retirer etc ... comme tu veux le faire pour ton tableau.
@++ !!
PS:
http://www.sgi.com/tech/stl/
Salut grdTonioHardware !
Effectivement, je n'avais pas du tout penser à utiliser les vector. Mais lorsque j'avais fait un essai, choper l'élément i d'un vector est bien plus long que de choper l'élément i d'un double * m = new double[taille]
Sais-tu pourquoi ?
Je connais la fonction push_back qui rajoute un élément à la fin d'un vector mais quelle est la fonction qui supprime l'élément i ?
Et plus généralement, sais-tu où je pourrais trouver une liste de toutes les fonctions membes ?
merci
pom
Effectivement, je n'avais pas du tout penser à utiliser les vector. Mais lorsque j'avais fait un essai, choper l'élément i d'un vector est bien plus long que de choper l'élément i d'un double * m = new double[taille]
Sais-tu pourquoi ?
Je connais la fonction push_back qui rajoute un élément à la fin d'un vector mais quelle est la fonction qui supprime l'élément i ?
Et plus généralement, sais-tu où je pourrais trouver une liste de toutes les fonctions membes ?
merci
pom
grdTonioHardware
Messages postés
43
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
22 avril 2007
12
>
pom
16 juil. 2004 à 16:37
16 juil. 2004 à 16:37
Le mieux c'est d'utiliser une deque car comme ca tu as des Random Iterators donc tu peux accéder du premier coup à l'objet qui t'intéresse ca sera plus rapide.
Pour supprimer un élément tu doit avoir un truc qui s'apelle pop_back ou pop_front ou un truc dans le genre.
sinon tu as erase( iterator ) pour supprimer à un endrois i de ta deque.
voilà !!
@++ et bonne prog !!
Pour supprimer un élément tu doit avoir un truc qui s'apelle pop_back ou pop_front ou un truc dans le genre.
sinon tu as erase( iterator ) pour supprimer à un endrois i de ta deque.
voilà !!
@++ et bonne prog !!
pom
>
grdTonioHardware
Messages postés
43
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
22 avril 2007
16 juil. 2004 à 17:26
16 juil. 2004 à 17:26
Salut, c'est la 1e fois que j'entends parler de deque. Est-ce dans le meme genre que vector ou list ?
et d'ailleurs quelles sont les différences majeures entre vector, list et deque ?
Merci en tout cas de tes renseignements
Pom
et d'ailleurs quelles sont les différences majeures entre vector, list et deque ?
Merci en tout cas de tes renseignements
Pom
Salut,
Si taille doit etre constant je ne vois pas pourquoi tu voudrais pouvoir enlever des elements.....
En allouant un tableau de cette maniere tu reserves un espace memoire suffisant pour stocker 4 double. Si ensuite tu veux "enlever" un element tu peux soit utiliser le fait de le mettre 0 ( ou un tout autre valeur pertinente) et faire des traitements particuliers lorsque tu le rencontres, soit decaler tes elements lorsque tu en supprimer une ( 1 2 3 4 => 1 3 4 0 si tu supprime 2) soit et c'est preferable, utiliser les structures adequates pour ce genre de pb comme les liste :-)
A+
Damien
Si taille doit etre constant je ne vois pas pourquoi tu voudrais pouvoir enlever des elements.....
En allouant un tableau de cette maniere tu reserves un espace memoire suffisant pour stocker 4 double. Si ensuite tu veux "enlever" un element tu peux soit utiliser le fait de le mettre 0 ( ou un tout autre valeur pertinente) et faire des traitements particuliers lorsque tu le rencontres, soit decaler tes elements lorsque tu en supprimer une ( 1 2 3 4 => 1 3 4 0 si tu supprime 2) soit et c'est preferable, utiliser les structures adequates pour ce genre de pb comme les liste :-)
A+
Damien
Salut damien, ma taille est constante car pour faire un tableau il faut que la taille soit constante, d'ou le const taille.
J'ai commencé mon prgm en mettant un -1 à la place de l'élément à retirer mais ca fait plein de test dans le prgm par la suite. Dès que je veux utiliser mon tableau, il faudra faire des tests.
pom
J'ai commencé mon prgm en mettant un -1 à la place de l'élément à retirer mais ca fait plein de test dans le prgm par la suite. Dès que je veux utiliser mon tableau, il faudra faire des tests.
pom