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 :

question générale sur les conteneurs


Sujet :

C++

  1. #1
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut question générale sur les conteneurs
    Bonjour,
    ceci est une question générale sur les conteneurs, une sorte de demande de retour d'expérience.
    J'utilise les conteneurs de la bibliothèque standards (std::list, std::map, std::vector) pour gérer des collections d'objets. Je me demande à chaque fois que je crée une collection s'il vaut mieux créer une collection d'objets ou une collection de pointeurs
    Je ne pense pas qu'il y est de réponse absolue, mais j'aimerai avoir vos avis éclairés sur la question.

    Pour ma part, je tends à privilégier les collections de pointeurs, du moins pour l'instant, parce que je me dis que l'objet à gérer par le conteneur est ainsi de taille plus petite que si j'avais une collection d'objets, enfin pour mes cas.

    Donc, vaut-il mieux utiliser ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /*! type collection of projects */
    typedef std::vector<Project*> ProjectCollection;
    ou cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /*! type collection of projects */
    typedef std::vector<Project> ProjectCollection;
    Sachant que je tendrai à privilégier le plus efficace en terme de rapidité d'exécution.
    Merci !

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 24
    Points : 29
    Points
    29
    Par défaut
    pour la rapidité d'execution, cela dépend de ce que tu veux faire ...si tu comptes faire beaucoup d'insertion par exemple, l'objet est copié, donc passe par des pointeurs ... le problème éternel du pointeur brut est la fuite de mémoire et sa validité ou non :/ (un autre problème va etre levé pour les manipulations du vecteur comme le tri : tu veux trier les objets pointés, pas les pointeurs ...)

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    En fait, cela va d'abord dépendre si il est normal que tes objets aient une sémantique de valeur ou une sémantique de référence. Après, il y a la possibilité d'optimiser en passant par des pointeurs bruts (ou mieux intelligents) plutôt que de stocker des grosses valeurs qui ont une copie couteuse (genre des matrices qui n'utiliseraient pas le Copy On Write)

    Sinon, un vecteur de pointeurs réservé à la bonne taille (pas d'éléments en attente d'être utilisés) consommera plus de mémoire que le vecteur de valeurs. Pour la liste, cela sera toujours le cas (pas de notion de réservation).

    PS: le tri n'est pas un gros problème vu que l'on peut utiliser notre foncteur de tri.

  4. #4
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    Citation Envoyé par Luc Hermitte
    En fait, cela va d'abord dépendre si il est normal que tes objets aient une sémantique de valeur ou une sémantique de référence.
    aucune idée...

    merci pour vos réponses.

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Ces points sont discutés dans la FAQ C++ lite.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Bonsoir,

    Pour répondre à votre question sur le choix d' un containeur avec ou sans pointeur.

    Soit pour un "vector" :
    1) Les objets sont plus rapides à insérer avec des pointeurs
    2) Mais il faut prévoir une procédure de désallocation de ces mêmes pointeurs.
    3) Résultat match sensiblement nul sauf partialité du juge.

    Maintenant le greffon du C++ qu' est la STL n ' aime pas vraiment les pointeurs. La STL c' est la promesse du C sans les pointeurs.

    De plus gardez en mémoire que tous ( de manière globale ) les containeurs de la STL fonctionnent en mémoire vive.
    Ce qui vous rend dépendant de votre configuration matérielle.

    Et oui , la STL ça brille aux yeux du professeur, mais peu efficace pour gérer des bases de données...

    Mais c'est une autre question !

    Cordialement.

  7. #7
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 755
    Points : 10 724
    Points
    10 724
    Billets dans le blog
    3
    Par défaut
    J'ai du mal à comprendre certaines de tes remarques :
    De plus gardez en mémoire que tous ( de manière globale ) les containeurs de la STL fonctionnent en mémoire vive.
    Ce qui vous rend dépendant de votre configuration matérielle.
    quelle bibliothèque ne fonctionne pas en mémoire vive ? Et quelle classe de stockage n'est pas dépendante de la configuration matérielle ? Que ce soit la RAM ou le disque dur (pour une BD) ?
    Et oui , la STL ça brille aux yeux du professeur, mais peu efficace pour gérer des bases de données...
    Pour gérer des bases de données, il y a... les bases de données. De même, pour trier un tableau de valeurs de quelques Mo, je ne pense pas qu'une base de données soit la bonne solution...
    Quant aux pointeurs, je trouve justement que la STL est bâtie sur la notion d'itérateur, qui est proche de celle du pointeur. La preuve on peut donne des pointeurs en tant qu'itérateurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const int size = 100;
    char buffer[ size ];
    std::fill_n( buffer, size, 0 );
    Moi je vois la STL comme une bibliothèque générique mettant à disposition du programmeur les types de données et les algorithmes les plus courants.
    Si on a besoin d'un tableau ou d'une liste, ou de faire un tri, la STL est toute indiquée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Questions générales sur les services NT
    Par scougirou dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 16/03/2007, 16h50
  2. [Hibernate 3] Questions générales sur les performances
    Par hugo123 dans le forum Hibernate
    Réponses: 7
    Dernier message: 13/12/2006, 18h02
  3. Question bête sur les conteneurs
    Par jadey dans le forum C++
    Réponses: 21
    Dernier message: 04/05/2006, 01h09
  4. Question générales sur les IG en Java
    Par link182 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 18/02/2006, 12h42
  5. Question générale sur les affectations ?
    Par Clemaster dans le forum C++
    Réponses: 5
    Dernier message: 09/08/2004, 18h03

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