Partage
  • Partager sur Facebook
  • Partager sur Twitter

Optimiser et insérer des éléments dans une matrice

Sujet résolu
    1 août 2019 à 17:48:20

    Bonjour à tous,

    Je suis débutant dans l'univers de C++ et je souhaiterai savoir quel type de tableau

    est le plus optimisé pour générer une matrice 3D contenant des pointeurs. Par ailleurs

    j'aimerai savoir comment insérer des éléments dans cette matrice. 

    Voici le code :

    #include <iostream>
    #include <vector>
    #include <Windows.h>
    
    
    constexpr auto SQUARE_CHUNK_SIZE = 350U;
    
    typedef uint64_t rb;
    
    
    int main()
    {
    	unsigned int x;
    	unsigned int y;
    	unsigned int z;
    
    	std::cout << "LOAD CHUNK... ";
    
    	std::vector<std::vector<std::vector<rb*>>>* chunk = new std::vector<std::vector<std::vector<rb*>>>;
    	for (x = 0; x < SQUARE_CHUNK_SIZE; x++)
    	{
    		(*chunk).push_back(std::vector<std::vector<rb*>>());
    		for (y = 0; y < SQUARE_CHUNK_SIZE; y++)
    		{
    			(*chunk)[x].push_back(std::vector<rb*>());
    			for (z = 0; z < SQUARE_CHUNK_SIZE; z++)
    			{
    				(*chunk)[x][y].push_back(nullptr);
    			}
    		}
    	}
    	
    	std::cout << "OK" << std::endl;
    
    
    	system("pause");
    	delete chunk;
    
    	return 0x0;
    }


    Merci d'avance pour vos réponse!

    • Partager sur Facebook
    • Partager sur Twitter

    Il n'y a pas de projets urgents, il y a que des projets en retards.

      1 août 2019 à 17:59:50

      Je ne comprend pas ton probleme ? Ca plante ? Pas le résultat souhaité ?

      " j'aimerai savoir comment insérer des éléments dans cette matrice.  "

      Tu as deja 3 push_back .. c'est comme ca qu'on insere un element dans un vector.

      • Partager sur Facebook
      • Partager sur Twitter
        1 août 2019 à 18:07:35

        Merci de ta réponse. 

        Ce que je cherche, c'est d'insérer à un endroit précis une donnée ("int" par exemple).

        Les 3 boucles "for" ont été récupérer d'un tutoriel et modifier pour créer ma matrice 

        Le programme ne plante pas, je cherche simplement à augmenter sa rapidité.

        • Partager sur Facebook
        • Partager sur Twitter

        Il n'y a pas de projets urgents, il y a que des projets en retards.

          1 août 2019 à 18:32:53

          PowerSosig a écrit:

          Merci de ta réponse. 

          Ce que je cherche, c'est d'insérer à un endroit précis une donnée ("int" par exemple).

          Les 3 boucles "for" ont été récupérer d'un tutoriel et modifier pour créer ma matrice 

          Le programme ne plante pas, je cherche simplement à augmenter sa rapidité.


          chunk[x][y][z] = value
          • Partager sur Facebook
          • Partager sur Twitter
            1 août 2019 à 18:45:27

            Merci, j'essaierai plus tard. Pour l'instant mon pc n'est pas avec moi.

            J'ai quelques questions encore :

            • Est-ce que cette solution marche avec les "vector"?
            • Est-ce que je peu stocker des pointeurs et utiliser des threads pour accélérer le remplissage de la matrice?
            • Partager sur Facebook
            • Partager sur Twitter

            Il n'y a pas de projets urgents, il y a que des projets en retards.

              1 août 2019 à 19:19:50

              PowerSosig a écrit:

              Merci, j'essaierai plus tard. Pour l'instant mon pc n'est pas avec moi.

              J'ai quelques questions encore :

              • Est-ce que cette solution marche avec les "vector"?
              • Est-ce que je peu stocker des pointeurs et utiliser des threads pour accélérer le remplissage de la matrice?
              1 - la solution marchera avec n'importe quel conteneur qui defini l'operateur [].
              ou bien vector.at(x).at(y).at(z) = .. ;   ( je ne me souviens plus lequel verifie les dépassement. )
              2 - Oui si ta matrice et tes objets pointé sont trade safe/locké par un mutex.


              • Partager sur Facebook
              • Partager sur Twitter
                1 août 2019 à 19:37:52

                Je te remercie pour ces réponses, Je regarderai tous ça en détails ce soir.

                Bonne appétit et bonne soirée ;)
                • Partager sur Facebook
                • Partager sur Twitter

                Il n'y a pas de projets urgents, il y a que des projets en retards.

                  1 août 2019 à 19:38:42

                  PowerSosig a écrit:

                  Je te remercie pour ces réponses, Je regarderai tous ça en détails ce soir.

                  Bonne appétit et bonne soirée ;)


                  Il est 13h40 chez moi mais merci :) bon appetit et bonne soirée a toi !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 août 2019 à 20:09:40

                    Bonjour,

                    Zérotisme a écrit:

                    ... 1 - la solution marchera avec n'importe quel conteneur qui defini l'operateur [].
                    ou bien vector.at(x).at(y).at(z) = .. ;   ( je ne me souviens plus lequel verifie les dépassement. ) ...

                    C'est l’utilisation de "at()" qui vérifie systématiquement les  bornes ... et donc qui est moins performant.

                    Il est préférable d'utiliser "[]",  et une précondition pour vérifier l’algorithme (un assert).

                    PS: Il est 20h8 ici!



                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 août 2019 à 20:52:25

                      Bonjour,

                      Le vector<> a des capacités intéressantes de comportement, les vector<vector<>> est nettement plus coriace à utiliser voire pourrait être désastreux en environnement multithread. En particulier tu parles d'insertions, ne compte pas faire des insertions dans des threads pendant que d'autres font des lectures. Peut-être qu'un vector<array<,>> serait utilisable. Il faudrait plus d'informations sur ton besoin pour mieux t'aider.

                      Peut-être peux-tu bénéficier des instructions vectorisées (mot qui n'a rien à voir avec les vector<> du C++)

                      • Partager sur Facebook
                      • Partager sur Twitter

                      En recherche d'emploi.

                        1 août 2019 à 21:04:59

                        Dalfab a écrit:

                        Bonjour,

                        Le vector<> a des capacités intéressantes de comportement, les vector<vector<>> est nettement plus coriace à utiliser voire pourrait être désastreux en environnement multithread. En particulier tu parles d'insertions, ne compte pas faire des insertions dans des threads pendant que d'autres font des lectures. Peut-être qu'un vector<array<,>> serait utilisable. Il faudrait plus d'informations sur ton besoin pour mieux t'aider.

                        Peut-être peux-tu bénéficier des instructions vectorisées (mot qui n'a rien à voir avec les vector<> du C++)


                        Question plus ou moins en rapport avec le sujet , mais est-ce qu'un tableau 3 dimension peut etre linéarisé ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          1 août 2019 à 22:59:41

                          Oui. Du moment que les dimensions sont fixes, il suffit de multiplier une dimension par les précédentes: z*W*H + y*W + x

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Optimiser et insérer des éléments dans une matrice

                          × 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