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

SL & STL C++ Discussion :

[STL] std::deque, reserve() ?


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut [STL] std::deque, reserve() ?
    Je cherche l'équivalent de la méthode reserve() de std::vector mais pour deque (et queue). Je ne la trouve pas...
    Merci.

  2. #2
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    dans quel but ?

    gagner du temps d'execution en allouant dès le debut de la memoire ?

    pour la gestion de la memoire (system embarqué) ?

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Oui, c'est l'évidence même...

    J'use et abuse de la méthode reserve() de std::vector quand je connais à l'avance le nombre d'éléments à traiter ou quand je peux en faire une estimation assez précise. Ça évite une fragmentation inutile de la mémoire (sans compter les allocations/désallocations avec les copies d'objets que cela implique, etc).

    Je m'étonne de ne pas trouver d'équivalent dans std::queue et std::deque.

    Une telle méthode existe-elle ?

  4. #4
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    pour les vecteurs la méthode reserve() est utile car la mémoire n'est pas fragmentée, c'est un bloc qu'il faudrait réallouer entièrement à chaque changement de taille.

    Pour ta queue, les différents objets n'ont pas besoin d'être côte à côte et faire une nouvelle allocation avant ou après ne change vraiment pas grand chose car il faudra faire autant d'allocations, car une allocation = un objet. (pour les vecteurs une allocation = tous les objets)

  5. #5
    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,

    Si reserve a un intéret dans le cadre des vector, c'est parce qu'ils sont basés sur un tableau C style ( ex: int mbr[10], int ptr*= new int[10]), meme si c'est transparent pour l'utilisateur, ce qui fait que les différents éléments sont placés dans des espaces contigus de la mémoire.

    Cela permet donc de dire, dés le départ "je prévois d'avoir (n) éléments dans mon tableau", et d'éviter le problème de la réallocation de la mémoire tant que l'on n'a pas atteind le (n-1)eme élément.

    Par contre la deque fnoctionne plutot sur le principe d'une "structure dynamique", ou, si tu préfères, d'une structure dans laquelle chaque élément dispose d'un pointeur vers l'élément précédent/suivant.

    L'espace mémoire utilisé par les différents éléments ne doit donc pas etre contigu, vu qu'il est alloué "au premier endroit où on trouve un espace suffisant pour faire tenir l'élément"

    Simplement, afin de permettre un ajout en temps constant à la fin de la liste (en évitant de devoir reparcourrir l'ensemble des élément), la deque maintient également un pointeur sur le dernier élément qu'elle contient

    Il n'y a donc aucune raison de vouloir réserver de l'espace pour les différents éléments qu'elle contient, et, c'est la raison pour laquelle la méthode reserve n'existe purement et simplement pas
    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

  6. #6
    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
    Citation Envoyé par koala01
    Par contre la deque fnoctionne plutot sur le principe d'une "structure dynamique", ou, si tu préfères, d'une structure dans laquelle chaque élément dispose d'un pointeur vers l'élément précédent/suivant.
    Ne confondrais-tu pas avec std::list ?

    Je vois plus un deque comme une liste de tableaux de taille fixe.
    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.

Discussions similaires

  1. [STL std::map] element precedant
    Par ZaaN dans le forum SL & STL
    Réponses: 1
    Dernier message: 17/05/2007, 00h52
  2. STL, std::vector et SSE2
    Par mat087 dans le forum SL & STL
    Réponses: 9
    Dernier message: 24/03/2007, 23h04
  3. template, héritage et std:deque
    Par jmtrivial dans le forum Langage
    Réponses: 7
    Dernier message: 27/09/2006, 15h08
  4. [STL]std::map<std::string, structure> Parcour...
    Par Zenol dans le forum SL & STL
    Réponses: 5
    Dernier message: 11/02/2006, 13h46
  5. STL : std::set problème avec insert ...
    Par Big K. dans le forum MFC
    Réponses: 13
    Dernier message: 08/11/2003, 01h02

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