Tableau de taille variable en c++

Fermé
pom - 16 juil. 2004 à 12:29
 mostaf - 12 mai 2011 à 12:03
Bonjour, j'aimerais faire tableau dont sa taille varie au cour des itérations (en c++).
const int taille=4;
J'ai fait double * tab=new doube[taille];

mais taille doit etre constant.
L'idée est que je dois soit rajouter soit enlever des éléments de mon tableau tab.

merci
Pom
A voir également:

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! :)
3
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
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/
2
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
0
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
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 !!
0
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
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
0
Bonjours
comment faire l'algorithme génétique pour le problème d'ordonnancement de l'atelier Flow Shop
à +
0
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
1
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
0