Je cherche l'équivalent de la méthode reserve() de std::vector mais pour deque (et queue). Je ne la trouve pas...
Merci.
Je cherche l'équivalent de la méthode reserve() de std::vector mais pour deque (et queue). Je ne la trouve pas...
Merci.
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é) ?
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 ?
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)
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
Ne confondrais-tu pas avec std::list ?Envoyé par koala01
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.
Partager