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 :

Stockage dynamique d'éléments: Choix d'un conteneur


Sujet :

C++

  1. #1
    BNS
    BNS est déconnecté
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 129
    Par défaut Stockage dynamique d'éléments: Choix d'un conteneur
    Bonjour à tous,

    dans le cadre d'un programme de People Tracking, je dois pouvoir stocker un élément "people" (ID de la personne, position dans la salle, etc...) quelque part dans ma mémoire, et pouvoir y accéder. Or, ce tableau ne doit pas avoir une taille fixe, car le nombre de personne est amené à varier en permanence.
    Quelle serait donc la structure de stockage idéale dans mon cas?
    J'ai déjà fais quelques recherces, dans la FAQ par exemple. Ils proposent un graph pour choisir son conteneur ici: http://c.developpez.com/faq/cpp/?pag...hoix_conteneur. Or, cela m'amène à choisir une structure map, mais ca ne m'aide pas beaucoup, je suis toujours dans la flou, car je n'ai jamais travaillé avec, ni meme entendu parler de cette structure.
    Il y a aussi ce topic, qui parle de l'utilisation de listes chainées, mais la discussion porte plus sur le langage C.
    http://www.developpez.net/forums/arc...p/t-90414.html

    Que me conseilleriez vous? Tableau classique (est-il possible de le redimmensionner proprement?)? Liste chainée? Autre?
    Merci d'avance pour votre aide

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Pour le tableau classique avec cependant redimensionnement "automatique" (dans le sens ou ce n'est pas toi qui gère ça), il y a std::vector.
    Une std::map est tout simplement un tableau associatif.
    Pour la liste chainée, tu as std::list.
    A toi de voir, selon tes besoins.

  3. #3
    BNS
    BNS est déconnecté
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 129
    Par défaut
    Je crois que la structure vector est bien adaptée. Si je comprend bien, si je la définie comme un tableau de 10 éléments, puis que je veux en ajouter un 11ème, la methode push_back alloue la memoire toute seule, c'est bien ca?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 401
    Par défaut
    En effet.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Je crois que la structure vector est bien adaptée.
    Ce qui signifie que tu ne sais pas répondre aux questions simples du graphe sur ce que tu veux.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    C'est clair que si t'as besoin d'acceder a une personne par son ID, c'est pas un vector qu'il te faut, c'est clair comme de l'eau de roche.....

    non c'est bien une map. trouve un tutorial pour apprendre a l'utiliser.

    c'est du genre:

    std::map<int, Person*> persons;
    persons[2] = new Person(2, "myname", ... )
    Person *clickedPerson = persons[2];

    ...

    en plus un Vector aura des pertes de performance si ca s'agrandit de trop, j'avais eu un probleme comme ca avant.

    A+

  7. #7
    BNS
    BNS est déconnecté
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 129
    Par défaut
    Citation Envoyé par loufoque
    Ce qui signifie que tu ne sais pas répondre aux questions simples du graphe sur ce que tu veux.
    Au contraire, je sais repondre aux questions simples du graphe, preuve en est:
    cela m'amène à choisir une structure map
    Mais vu que je n'ai pas besoin de chercher une personne par ID dans mon conteneur, et que le nombre de personne ne devrait pas éxcéder 7 ou 8 je pense, le vector est peut-etre plus adapté voila tout.

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Si l'ID se trouvait dans ta classe Personne, il fallait sans doute plus un set.
    Bon, si avec un vector, tu t'en sors, tant mieux
    Pour les pbs de performance pour de gros vecteurs, on peut lui demander de reserver une taille de mémoire importante pour ne pas avoir des copies à tout va, ou utiliser un deque.

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Citation Envoyé par BNS
    Au contraire, je sais repondre aux questions simples du graphe
    Ben justement, la preuve que non.
    Ce dont tu as besoin c'est un vector (cf. "Je crois que la structure vector est bien adaptée"), mais comme tu ne sais pas répondre aux questions le graphe te dit que tu as besoin d'une map.

    c'est du genre:

    std::map<int, Person*> persons;
    persons[2] = new Person(2, "myname", ... )
    Person *clickedPerson = persons[2];
    Oui enfin plutôt std::map<int, Person>.

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    Citation Envoyé par loufoque
    Oui enfin plutôt std::map<int, Person>.
    non non Person*
    enfin moi je n'utilise quasiment que les pointers.

    souvent dans ce cas, on souhaite modifier l'objet qui a ete clické ...

    Comment tu fais toi ?

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Pointeurs intelligents power

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    quand ca sera standard ....

  13. #13
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Bientôt, bientôt !
    Dans la prochaine version de Boost, il y aura même des fichiers d'en-têtes spéciaux pour utiliser TR1 en avance.

  14. #14
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Citation Envoyé par epsilon68
    non non Person*
    enfin moi je n'utilise quasiment que les pointers.
    Ce qui est bien souvent une mauvaise idée.
    De toutes façons il a dit qu'il voulait stocker des personnes, pas les réferencer.

  15. #15
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    On va simplement dire que ça dépend des classes. Il faut déjà qu'elles soient copiables pour les stocker directement dans les conteneurs, et que leur copie soit légère si on fait beaucoup d'insertion et d'effacement.

  16. #16
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    Citation Envoyé par loufoque
    Ce qui est bien souvent une mauvaise idée.
    De toutes façons il a dit qu'il voulait stocker des personnes, pas les réferencer.
    t'es bien sur de toi...
    tu peux developper un peu ton idée et m'expliquer pourquoi c'est souvent une mauvaise idée ?

  17. #17
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Parce qu'au moindre pb, il y a fuite mémoire, je pense que c'est à ça qu'il voulait faire allusion.

  18. #18
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    ... humm
    quoi dire de plus ?

    sans pointer pas de polymorphisme, rien ...
    et on peut s'occuper de la gestion memoire pour ne pas avoir "de fuite"

    bizarre ce type de reflexion quand meme ....

    les pointers font partie du language et il faut faire avec,
    j'ai l'impression que beaucoup de personnes aimeraient bien faire du Java en C++...

    desolé...

    A+

  19. #19
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Dans ce genre de cas, on utilise alors une classe englobante, de préférence, afin de pas rencontrer ces problèmes.

  20. #20
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    bah oui...
    pourtant simple non ? ....

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/10/2007, 01h12
  2. Ajout/Suppression dynamique d'éléments
    Par Norin dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/03/2007, 20h15
  3. Choix d'un conteneur
    Par olive_le_malin dans le forum C++
    Réponses: 9
    Dernier message: 05/12/2006, 11h13
  4. Parcours dynamique des éléments d'un form
    Par leminipouce dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 02/10/2006, 20h09
  5. Choix du bon conteneur
    Par new.proger dans le forum C++
    Réponses: 5
    Dernier message: 09/08/2006, 01h03

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