IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Tableau 2D rapide


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 23
    Par défaut Tableau 2D rapide
    Bonjour

    Je cherche à manipuler très rapidement un tableau 2D dont la colonne 1 serait fixe et la 2d dynamique -dans l'idéal-, de manière à associer à une mollécule (col 1) un nombre variable de particules (col 2), ajoutées et supprimées à la volée...
    Cette opération ayant lieu de nombreuses fois et pendant d'autres calculs, tels que des collisions 3D gérées par un moteur de physique, je me suis tourné vers Boost en pensant gagner en performances.

    Auriez-vous quelques conseils ?

    A quel point un tableau fixe est-il + rapide qu'un dynamique, quitte à laisser bcp de cases vides ?

    Pour l'instant j'essaie d'utiliser un multi_array , mais je n'arrive pas à ajouter correctement des valeurs à un emplacement précis :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    typedef boost::multi_array<int, 2> array_type;
    typedef array_type::index index;
    int cl1 = 10;
    int cl2 = 50;
    array_type molles_A(boost::extents[cl1][cl2]);
    
    ...
    
    void ajouter(int idMol, int idA, int idB)
    {
    
    int nextPos = //? comment évaluer la position suivant le dernier élément ajouté ?
    molles_A[idMol][nextPos] = idA;
    molles_A[idMol][nextPos] = idB;
    
    }
    
    void supprimer(id)
    {
    for(index i = 0; i != cl1; ++i)
        for(index j = 0; j != cl2; ++j)
           if( molles_A[i][j]  == id )
    molles_A[i][j] = NULL;
     break;
    }
    J'épluche encore la doc mais pourriez vous m'aider à trouver la formulation pour nextPos

    Que pensez vous de la manière de supprimer() un élément ?

    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je ne connais pas trop boost::multi_array, mais je ne vois pas trop ce que ça apporte a priori dans ton cas où la dimension est fixe et faible, et où tu n'as pas vraiment un tableau à deux dimensions, puisque qu'il n'est pas rectangle, mais en dents de scies.

    Du coup, je partirais vers un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct molécule
    {
      // La molécule elle même
      Conteneur2<Particules> mesParticules;
    };
     
    Conteneur1<molécule> monTableau;
    Avec a priori Conteneur2 étant un std::vector (ou éventuellement un boost::array si tu veux travailler en dimension fixe), et Conteneur1 étant std::vector, std::list, std::deque... ou tout autre en fonction des opérations que tu vas faire sur ce tableau.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par JolyLoic Voir le message
    <snip>
    Avec a priori Conteneur2 étant un std::vector (ou éventuellement un boost::array si tu veux travailler en dimension fixe), et Conteneur1 étant std::vector, std::list, std::deque... ou tout autre en fonction des opérations que tu vas faire sur ce tableau.
    Et encore, tout dépend du type d'accès que tu envisage pour les particules...

    Si tu envisage un acces aléatoire, le vecteur est l'alternative à privilégier, mais si le but est d'en permettre le positionnement en trois dimensions pour être en mesure de voir ta molécule "sous tous les angles" et de choisir la particule enfonction de sa position, une map, voir un boost::multi_index peut s'avérer bien plus intéressant (partant du principe qu'une particule n'a normalement pas besoin de savoir sa position)...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. [JavaScript] [SRC] Construire un grand tableau plus rapidement
    Par SpaceFrog dans le forum Contribuez
    Réponses: 9
    Dernier message: 20/02/2010, 22h01
  2. Réponses: 1
    Dernier message: 22/06/2007, 13h48
  3. Initialisation rapide tableau
    Par Sébastien P dans le forum C++
    Réponses: 2
    Dernier message: 08/01/2007, 16h43
  4. Accès le plus rapide: Pointeur ou tableau?
    Par homeostasie dans le forum C
    Réponses: 21
    Dernier message: 01/09/2006, 14h08
  5. affichage rapide d'un tableau
    Par exter666 dans le forum MFC
    Réponses: 16
    Dernier message: 15/04/2005, 03h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo