Tableau /C++

Bonjour,
S V P, comment declarer et utiliser un tableau à deux dimension dont la taille est variable !!!
Configuration: Windows XP
Safari 532.0

5 réponses

  1. oups, je viens de voir un truc : tu voulais un tableau à deux dimensions.

    Dans ce cas tu n'as qu'à faire un vector de pointeurs vers d'autres vector. (Un vector de vector ne fonctionnerait pas très bien à cause d'un problème de taille trop variable)
    0
    1. tu peut téeXpliké encore, jé pa bien compris le probléme de probleme. :DD.
      0
    2. @DrCrowc'est un peu technique.

      le type Vector permet de garder un avantage assez important des tableaux en C / C++ : le fait que toutes les données soient à la suite en mémoire.

      Tu pourrais faire un vector < vector<int> > par exemple pour stocker un tableau en deux dimensions avec des int. Mais comme touts les éléments sont stockés à la suite en mémoire, le c++ assigne la même taille à tous les éléments.

      Ex : tu as 8 vector<int> avec dedans : {1, 2, 3, 4, 5}, {1, 2 , 3, ... 37}, ..., {1, 2, 3, ... 100}.
      Le premier est de taille 5, le dernier de taille 100.

      Si tu fais un vector< vector<int>> rempli avec ces tableaux, le C++ est obligé de donner une taille fixe pour chacun, donc allouer au moins 100 places pour chaque vector, même si c'est inutile car les autres sont bien plus petits.

      Autre problème, si tu ajoutes encore un autre vector<int> dedans encore plus grand, alors le C++ sera obligé de revoir à la hausse la taille qu'il alloue pour chaque élément, et devra recréer l'intégralité du vector< vector<int> > en mémoire, ce qui implique du temps d'exécution et de l'espace mémoire.
      0
    3. @PacorabanixOkéOké, je crois ke Jé Capté un peu :DD, et merci pour le paragraphe ;) :)) é Bonne Nuit
      0
    4. @PacorabanixMerci Pacorabanix, gentiman,!!! votre suggestion est vraiment très efficace, j'espère être à la hauteur pour manipuler ces vector de pointeurs. si j'y arrive je vous contacterais.
      0
  2. merci je connais pas gros chose en c++ par contre C ou java
    0
    1. et ben, t'a qu'a utiliser les tableau ordinaire ^^
      0
  3. en C, je crois pas, et je ne sait pas . :( , :ppp
    avant in faut inclure le headers
    #include <vector>
    //On creer notre tableau dynamique.
    std::vector <int> Tabl(5);
    <int> ceci est le type de tableau,
    Tabl, c'est le nom :pp
    (5), c'est la taille.
    et ben pour les utilisation, voici qulque exemple.
    Tabl.push_back(2); //ajoute une case avec la valeur de 2;
    Tabl.pop_back(); //enleve une case du tableau.
    Tabl.clear();//tout éffacer, reinitialiser a zéro, case = 0, :pp
    Tabl.assign(5,3); //recreer le Tabl avec 5 case dont la valeur est 3, donc, c comme, un clear(); et puis 5 push_back(3);
    Tabl.resize(2,0); //redimensionner le tableau, ajouter ou enlever les acse qui manque , e les remplaçant par la valeur 0; si notre tableau contient 1 case avec la valeur 8, on ajoute une case , pour arriver a 2 avec la valeur 0,
    Ouuuf, c tout, :D
    et plein d'autre ....
    0
    1. ya aussi les std::vector , connu aussi sous le noms de tableau dynamique, ils sont du genre tableau, mais leur taille peut changer au cours du programmme.
      0
      1. très intéressant tu peut faire un exemple simple de sa utilisation
        sa marche aussi en C ??
        0
      2. @nobie-csnon ça ne marche pas en C.

        //à ràjouter au début :  #include <vector>
        std::vector<int> monTableau;
        
        for (int i=0; i<10; i++) {
          monTableau.pushback(5*i);
        }
        //monTableau contient la table de 5 (de 0 à 45)
        
        monTableau[20] = 3; //ceci donne une erreur car monTableau n'est pas de la bonne taille, il est de taille 10.
        
        monTableau.resize(30);
        monTableau[20] = 3;  // valide car monTableau est de taille 30. 


        j'ai peut-être fait une ou deux petites erreurs.
        0
      3. @Pacorabanix:D, resize() , sa prend deux paramétre. (la taille et la valeur.) ;)
        et push_back(), sa c'crit de cet faàon et pas pushback() , :ppp. ;)
        0
      4. Merci DrCrow pour l'astuce des "vector" s!! mais je ne sais pas si ça peut marcher pour un truc à deux dimensions?
        0
      5. @abkhalilPour un vector deux dimensions std::vector < <std::vector<int > > nom_tab;
        faut bien laisser d'espace entre les "< < " :D, pour ne pas le confondre avec les fluX,
        0
    2. tu peut utiliser une list
      un truc de se genre
      // list::assign
      #include <iostream>
      #include <list>
      using namespace std;
      
      int main ()
      {
        list<int> first;
        list<int> second;
      
        first.assign (7,100);                      // 7 ints with value 100
      
        second.assign (first.begin(),first.end()); // a copy of first
      
        int myints[]={1776,7,4};
        first.assign (myints,myints+3);            // assigning from array
      
        cout << "Size of first: " << int (first.size()) << endl;
        cout << "Size of second: " << int (second.size()) << endl;
        return 0;
      }
      
      0