Partage
  • Partager sur Facebook
  • Partager sur Twitter

Talbleaux dynamique... dimension 3 !!

Mission impossible ?

Sujet résolu
    15 décembre 2007 à 21:42:58

    Bonjour à tous !

    Pour mon code j'aimerais avoir un tableau à trois dimension ^^ le problème c'est que si je le crée "normalement" il est trop grand :colere2: et ça fait planter le programme :(

    Mais si il est créé dynamiquement non seulement le code sera optimisé mais en plus il ne sera pas trop grand ! Par contre je me pose de sérieuses questions quant à la faisabilité du truc :p il parait que déjà 2 dimensions c'est dur alors 3...

    Voila, est-ce possible, et si oui comment procéder ?

    Merci !
    • Partager sur Facebook
    • Partager sur Twitter
      15 décembre 2007 à 22:20:43

      Les multy-array de boost le font facilement et proprement.
      http://www.boost.org/libs/multi_array/doc/index.html

      edit : Et bonsoir au passage. ^^
      • Partager sur Facebook
      • Partager sur Twitter
        16 décembre 2007 à 0:38:39

        En effet ça a l'air intéressant, par contre je ne trouve pas la librairie, ça parait stupide mais je ne trouve nul par où la télécharger... Et comme mon anglais est limité, j'ai du mal :euh:

        Et je vois des histoires de compilations que je ne comprends pas bien, il faudra que je compile cette librairie en plus ?
        • Partager sur Facebook
        • Partager sur Twitter
          16 décembre 2007 à 1:04:15

          tu peux faire des tableaux dynamique de dimension 10 si tu veux :)
          Il faut juste faire attention dans les new, et mettre les bons pointeurs !

          int*** tab3D; // tableau dynamique 3D acceptable.
          (a allouer correctement !)

          Sinon, std::vector ou boost::array peuvent t'aider

          std::vector<std::vector<std::vector<int> > > V; // acceptable
          • Partager sur Facebook
          • Partager sur Twitter

          Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

            16 décembre 2007 à 11:17:27

            Citation : O.G.R.E.

            je ne trouve pas la librairie


            Par ici la bonne soupe : http://sourceforge.net/project/showfiles.php?group_id=7586

            Citation : O.G.R.E.

            Et je vois des histoires de compilations que je ne comprends pas bien, il faudra que je compile cette librairie en plus ?


            Boost est composée de plusieurs modules indépendants les uns des autres. Certains ont besoins d'être compilés car ils dépendent directement de ta machine. Pour MultyArray je ne sais pas, il faut chercher un peu. ;)
            • Partager sur Facebook
            • Partager sur Twitter
              16 décembre 2007 à 13:23:05

              Merci pour vos réponses :)

              Pendant le téléchargement de boost::array, je me suis fait un ptit code vite fait avec les indications de Fvirtman :

              1. #include <iostream>
              2. #include <string>
              3. #include <vector>
              4. #include <algorithm>
              5. #include <numeric>
              6. #define TAILLE 5
              7. using namespace std;
              8. int main()
              9. {
              10.     std::vector<std::vector<std::vector<string> > > bonjour;
              11.     bonjour.resize(TAILLE);
              12.     for(int i = 0; i < TAILLE; i++)
              13.     {
              14.         bonjour[i].resize(TAILLE);
              15.         for(int j = 0; j < TAILLE; j++)
              16.         {
              17.             bonjour[i][j].resize(TAILLE);
              18.             for (int k = 0; k < TAILLE; k++)
              19.             {
              20.                 bonjour[i][j][k] = "bonjour";
              21.                 cout << "i=" << i << " j=" << j <<" k="<< k;
              22.                 cout << bonjour[i][j][k] << endl;
              23.             }
              24.         }
              25.     }
              26.         return 0;
              27. }


              Et bien ce code marche, mais j'aimerais savoir si il est laid, hideux, ou si je me complique la vie ^^ bref vos avis, et ce que pourrais apporter le boost::aray :-°
              • Partager sur Facebook
              • Partager sur Twitter
                16 décembre 2007 à 13:37:27

                Salut,
                Il me semble que tu peut faire beaucoup plus simple en faisant ceci :

                1. bonjour.resize(TAILLE, std::vector(TAILLE,std::vector<string>(TAILLE, "bonjour")));

                Mais à tester ^^
                • Partager sur Facebook
                • Partager sur Twitter
                  16 décembre 2007 à 14:52:07

                  La solution de Warzer est la meilleure.

                  Ton code n'est pas hideux, il est même très bien, tu n'as pas besoindes std:: devant les vector puisuqe tu as indiqué l'utilisation de cet espace de nommage.

                  Le seule défaut des vector pour les tableaux multidimensionnels c'est que les colonnes n'ont pas forcément toutes la même longueur. Mais si tu gères ton code correctement, il n'y a pas de problème.

                  L'utilisation de Boost est une possibilié mais est-ce nécessaire de srtr l'artillerie lourde ?

                  La question que je me pose quand même est:
                  Tu veux faire un truc dynmaique ou pas ? (Apparement pas vu le code) Si non, pourquoi ne pas faire un simple tableau [][][] ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                    16 décembre 2007 à 15:44:53

                    Citation : Nanoc

                    L'utilisation de Boost est une possibilié mais est-ce nécessaire de srtr l'artillerie lourde ?


                    Ce n'est pas une question de vie ou de mort mais puisque ça a été fait pour... pourquoi se priver ? :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 décembre 2007 à 16:12:31

                      En fait ce que j'aimerais faire au final c'est un tableau qui contiendrait des tableaux 2D ^^ donc au final un tableau 3D. Et j'ai besoin qu'il soit dynamique, ce que j'ai fait plus haut été juste un essais.

                      je comprend pas trop quand qand tu dis :

                      Citation : Nanoc

                      Le seule défaut des vector pour les tableaux multidimensionnels c'est que les colonnes n'ont pas forcément toutes la même longueur.


                      on ne peut faire que des tableaux "rectangle" c'est ça ?

                      Moi ce que j'aimerais au final c'est des tableaux du type : tableau[2][375][495] par exemple. Mais ne connaissant pas les valeurs avant compilation, j'ai besoin de le faire de façon dynamique ^^ Si je le fait comme plus haut, ça marche ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 décembre 2007 à 16:17:32

                        Non c'est pas des tableaux rectangles (c'est le but), mais on peut faire des trucs bien pire, du type:

                        X X X X X
                        X X X
                        X X X X
                        X
                        X X X X X X
                        X X

                        par exemple dans le cas d'un tableau 2D.

                        En fait tu veux faire un tableau de (Tableau 2D de taille fixe). Pourquoi ne pas faire alors des:

                        vector < int [5][5] > par exemple. De telle sorte que seulement la partie qui doit être dynamique le soit réellement.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                          16 décembre 2007 à 16:22:18

                          non parce que les tableaux 2D je connais pas leur taille avant compilation :-°

                          Mais moi je vais faire des tableaux rectangles, donc j'ai pas trop à me fatiguer ^^

                          (pour tout dire en fait je fais des tableaux de maps, où la map est un tableau 2D (x et y) mais avant le chargement de la map on ne connait pas encore la taille de celle ci, d'où l'allocution dynamique)
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Talbleaux dynamique... dimension 3 !!

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown