Rechercher : dans
Par :

Tableau de taille variable en c++

Dernière réponse le 16 jui 2004 à 17:26:03 pom, le 16 jui 2004 à 12:29:29 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « tableau de taille variable en c++ » dans :
Langage C - Les opérateurs VoirQu'est-ce qu'un opérateur ? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, etc. On distingue plusieurs types d'opérateurs : les opérateurs de calcul les opérateurs...
Javascript - Les tableaux VoirIntroduction à la notion de tableau Les variables de Javascript ne permettent de stocker qu'une seule donnée à la fois. Or, étant donné qu'il est souvent utile de manipuler de nombreuses données, le concept de variable se révéle parfois...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...

1

damien, le 16 jui 2004 à 13:22:24

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

Répondre à damien

5

pom, le 16 jui 2004 à 14:40:38

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

Répondre à pom

2

ledjlale, le 16 jui 2004 à 13:32:19

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! :)

Répondre à ledjlale

3

grdTonioHardware, le 16 jui 2004 à 13:33:01

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/

Répondre à grdTonioHardware

4

pom, le 16 jui 2004 à 14:38:53

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

Répondre à pom

6

grdTonioHardware, le 16 jui 2004 à 16:37:12

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 !!

Répondre à grdTonioHardware

7

 pom, le 16 jui 2004 à 17:26:03

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

Répondre à pom
Collection CommentÇaMarche.net