Tableau de taille variable en c++

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

3 réponses

  1. 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
    1. 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
      1. 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
      2. @pomLe 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
      3. @grdTonioHardwareSalut, 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
      4. Bonjours
        comment faire l'algorithme génétique pour le problème d'ordonnancement de l'atelier Flow Shop
        à +
        0
    2. 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
      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