 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
heinquoi Guest
|
Posted: Mon Jun 14, 2004 11:14 pm Post subject: STL deque et stack |
|
|
Bjr,
j'ai une question con...je peux ?
voici
quel est intérêt de la stack lorsque les container on déjà des fonctions
pop_front,push_front ?
sachant que la stack peut etre adapté aux containers vector, list et deque,
et que ces containers ont des fonctions qui peuvent tout a fait faire une
stack si on les utilise.
--
Cordialement,
Heinquoi
|
|
| Back to top |
|
 |
Loïc Joly Guest
|
Posted: Tue Jun 15, 2004 5:31 am Post subject: Re: STL deque et stack |
|
|
heinquoi wrote:
| Quote: | Bjr,
j'ai une question con...je peux ?
voici
quel est intérêt de la stack lorsque les container on déjà des fonctions
pop_front,push_front ?
sachant que la stack peut etre adapté aux containers vector, list et deque,
et que ces containers ont des fonctions qui peuvent tout a fait faire une
stack si on les utilise.
|
Elle n'offre QUE l'interface d'une stack, et évite ainsi que quelqu'un
puisse regarder ce qui se passe à l'intérieur et cass cette abstraction.
--
Loïc
|
|
| Back to top |
|
 |
heinquoi Guest
|
Posted: Tue Jun 15, 2004 9:29 am Post subject: Re: STL deque et stack |
|
|
"Loïc Joly" <loic.actarus.joly (AT) wanadoo (DOT) fr> a écrit dans le message de
news:cam1cl$qpn$1 (AT) news-reader5 (DOT) wanadoo.fr...
| Quote: | quel est intérêt de la stack lorsque les container on déjà des fonctions
pop_front,push_front ?
Elle n'offre QUE l'interface d'une stack, et évite ainsi que quelqu'un
puisse regarder ce qui se passe à l'intérieur et cass cette abstraction.
|
ok, merci
cordialement
H
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Tue Jun 15, 2004 7:36 pm Post subject: Re: STL deque et stack |
|
|
Dans news:40ce3113$0$13823$626a14ce (AT) news (DOT) free.fr,
heinquoi <nospam*heinquoi1 (AT) libertysurf (DOT) fr> a écrit :
| Quote: | j'ai une question con...je peux ?
voici quel est intérêt de la stack lorsque les container on déjà
des fonctions pop_front,push_front ?
sachant que la stack peut etre adapté aux containers vector,
list et deque, et que ces containers ont des fonctions qui
peuvent tout a fait faire une stack si on les utilise.
|
Comme on t'a répondu ailleurs, c'est une question d'abstraction.
Si ce n'est pas assez clair, demande-toi pourquoi il y a la
classe std::list dans la bibliothèque puisqu'on peut implémenter
tout ça avec les simples pointeurs et new... On aime ne pas avoir
plus que nécessaire et avoir l'interface la plus proche de notre
abstraction.
--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Thu Jun 17, 2004 4:37 pm Post subject: Re: STL deque et stack |
|
|
Franck Branjonneau <fasbjx (AT) free (DOT) fr> writes:
| Quote: | Samuel Krempp <krempp (AT) crans (DOT) truc.en.trop.ens-cachan.fr> écrivait:
faire un push() conserve la validité des
itérateurs dans un stack ou pas ? et pour pop() ?
La question est mal posée : une std::stack<> n'a pas d'itérateur.
|
Ce qui, ÀMÀ, est une kolossale erreur. Plusieurs fois, j'ai abandonné
std::stack pour utiliser le bon vieux std::vector. Pas plus tard qu'hier,
un de nos étudiants se posait la même question : comment itérer sur
un std::stack sans avoir à faire des opérations destructrices.
(Il utilisait std::tack<xxx::Scope*> et voulait implémenter des règles
de look-up).
Il n'y a pas de mystère sur ce que fait un push() ou un pop(): Ils
transforment ça en un push_back() et un pop_back(). L'invalidation des
itérateurs s'en suit comme conséquence:
(1) si tu adaptes un machin qui ressemble à un vecteur, t'as des
problèmes.
(2) si tu adaptes un machin qui ressemble à une liste, t'as pas de
problèmes.
-- Gaby
|
|
| Back to top |
|
 |
Samuel Krempp Guest
|
Posted: Fri Jun 18, 2004 10:22 pm Post subject: Re: STL deque et stack |
|
|
le Tuesday 15 June 2004 21:36, [email]mm (AT) gdzid (DOT) com[/email] écrivit :
| Quote: | Dans news:40ce3113$0$13823$626a14ce (AT) news (DOT) free.fr,
heinquoi <nospam*heinquoi1 (AT) libertysurf (DOT) fr> a écrit :
j'ai une question con...je peux ?
voici quel est intérêt de la stack lorsque les container on déjà
des fonctions pop_front,push_front ?
sachant que la stack peut etre adapté aux containers vector,
list et deque, et que ces containers ont des fonctions qui
peuvent tout a fait faire une stack si on les utilise.
Comme on t'a répondu ailleurs, c'est une question d'abstraction.
Si ce n'est pas assez clair, demande-toi pourquoi il y a la
classe std::list dans la bibliothèque puisqu'on peut implémenter
tout ça avec les simples pointeurs et new...
|
enfin c'est pas vraiment la meme chose. Si on veut stocker des choses
suivant le concept de liste avec seulement les pointeurs, il va falloir
écrire son propre truc, pas complètement trivial.
ce qui surprend l'OP, c'est que le concept de stack est satisfait par deque,
et que cependant la norme définit un container stack à part entière, qui
n'ajoute aucune propriété par rapport à deque : il a seulement des
propriétés en moins..
enfin je ne suis pas sûr, faire un push() conserve la validité des
itérateurs dans un stack ou pas ? et pour pop() ?
| Quote: | On aime ne pas avoir
plus que nécessaire et avoir l'interface la plus proche de notre
abstraction.
|
soit. m'enfin la norme ne se donne pas la peine d'ajouter une classe partout
où elle pourrait le faire juste pour aider le programmeur à exprimer ses
intentions, l'existence de <stack> doit probablement bcp au catalogue usuel
des concepts de containers classiques.
--
Sam
|
|
| Back to top |
|
 |
Franck Branjonneau Guest
|
Posted: Sat Jun 19, 2004 7:35 pm Post subject: Re: STL deque et stack |
|
|
Samuel Krempp <krempp (AT) crans (DOT) truc.en.trop.ens-cachan.fr> écrivait:
| Quote: | faire un push() conserve la validité des
itérateurs dans un stack ou pas ? et pour pop() ?
|
La question est mal posée : une std::stack<> n'a pas d'itérateur.
--
Franck Branjonneau <fasbjx (AT) free (DOT) fr>
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Sun Jun 20, 2004 9:32 am Post subject: Re: STL deque et stack |
|
|
Franck Branjonneau <fasbjx (AT) free (DOT) fr> writes:
| Quote: | Gabriel Dos Reis <gdr (AT) cs (DOT) tamu.edu> écrivait:
Plusieurs fois, j'ai abandonné std::stack pour utiliser le bon vieux
std::vector.
Tu utilises des std::vector<> pour tes piles ? pas des std::deque<> ?
|
Oui et non.
-- Gaby
|
|
| Back to top |
|
 |
Franck Branjonneau Guest
|
Posted: Mon Jun 21, 2004 8:15 pm Post subject: Re: STL deque et stack |
|
|
Gabriel Dos Reis <gdr (AT) cs (DOT) tamu.edu> écrivait:
| Quote: | Plusieurs fois, j'ai abandonné std::stack pour utiliser le bon vieux
std::vector.
|
Tu utilises des std::vector<> pour tes piles ? pas des std::deque<> ?
--
Franck Branjonneau <fasbjx (AT) free (DOT) fr>
|
|
| Back to top |
|
 |
Franck Branjonneau Guest
|
Posted: Wed Jun 23, 2004 6:24 pm Post subject: Re: STL deque et stack |
|
|
Gabriel Dos Reis <gdr (AT) cs (DOT) tamu.edu> écrivait:
| Quote: | Franck Branjonneau <fasbjx (AT) free (DOT) fr> writes:
| Gabriel Dos Reis <gdr (AT) cs (DOT) tamu.edu> écrivait:
|
| > Plusieurs fois, j'ai abandonné std::stack pour utiliser le bon vieux
| > std::vector.
|
| Tu utilises des std::vector<> pour tes piles ? pas des std::deque<> ?
Oui et non.
|
Mon acception du français me permet de lire :
1/ Tantôt oui et tantôt non. OK.
2/ Oui j'utilise des std::vector<> pour mes piles ; non pas des
std::deque<>. Et là je m'interroge. Le std::deque<> ne fait-il pas une
meilleure gestion de la mémoire que le std::vector<> lors
d'utilisations répétées de push()/pop() ?
--
Franck Branjonneau <fasbjx (AT) free (DOT) fr>
|
|
| Back to top |
|
 |
Loïc Joly Guest
|
Posted: Wed Jun 23, 2004 6:47 pm Post subject: Re: STL deque et stack |
|
|
Franck Branjonneau wrote:
| Quote: |
2/ Oui j'utilise des std::vector<> pour mes piles ; non pas des
std::deque<>. Et là je m'interroge. Le std::deque<> ne fait-il pas une
meilleure gestion de la mémoire que le std::vector<> lors
d'utilisations répétées de push()/pop() ?
|
Tu parlerais de queues, je serais d'accord, mais pour des piles, vector
me semble meilleur avec les cas d'utilisation classiques.
--
Loïc
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Fri Jun 25, 2004 1:20 am Post subject: Re: STL deque et stack |
|
|
Franck Branjonneau <fasbjx (AT) free (DOT) fr> writes:
| Quote: | Gabriel Dos Reis <gdr (AT) cs (DOT) tamu.edu> écrivait:
Franck Branjonneau <fasbjx (AT) free (DOT) fr> writes:
| Gabriel Dos Reis <gdr (AT) cs (DOT) tamu.edu> écrivait:
|
| > Plusieurs fois, j'ai abandonné std::stack pour utiliser le bon vieux
| > std::vector.
|
| Tu utilises des std::vector<> pour tes piles ? pas des std::deque<> ?
Oui et non.
Mon acception du français me permet de lire :
|
« Oui » pour la première question, « non » pour la seconde.
| Quote: | 1/ Tantôt oui et tantôt non. OK.
2/ Oui j'utilise des std::vector<> pour mes piles ; non pas des
std::deque<>. Et là je m'interroge. Le std::deque<> ne fait-il pas une
meilleure gestion de la mémoire que le std::vector<> lors
d'utilisations répétées de push()/pop() ?
|
Mais std::deque<> ne me donne pas les garanties de std::vector<> que
j'utilise aussi -- il est rare que je traite une pile juste comme une
pile. En général, cela arrive uniquement dans une petite portion de
mes programmes. En fait, std::stack<> est un adapteur pour ces
onsidérations -- c'est un peu curieux que cela ce soit arrêter en
mi-chemin :-(
-- Gaby
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Sat Jun 26, 2004 2:22 pm Post subject: Re: STL deque et stack |
|
|
Dans news:cbcj6n$6r4$1 (AT) news-reader3 (DOT) wanadoo.fr, Loïc
Joly <loic.actarus.joly (AT) wanadoo (DOT) fr> a écrit :
| Quote: | Franck Branjonneau wrote:
2/ Oui j'utilise des std::vector<> pour mes piles ; non pas des
std::deque<>. Et là je m'interroge. Le std::deque<> ne fait-il
pas une meilleure gestion de la mémoire que le std::vector
lors d'utilisations répétées de push()/pop() ?
Tu parlerais de queues, je serais d'accord, mais pour des
piles, vector me semble meilleur avec les cas d'utilisation
classiques.
|
Tu peux expliquer ? Parce que d'après moi, la norme ne choisit pas
std::deque pour rien, par défaut, dans std::stack. La gestion de
mémoire sera plus efficace avec deque. Son seul défaut général par
rapport à vector est l'accès aux éléments qui est un peu moins
direct que pour vector, mais pour une pile, il n'y a d'accès qu'à
un élément qui est facile si on garde l'itérateur...
--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
Loïc Joly Guest
|
Posted: Wed Jun 30, 2004 4:48 am Post subject: Re: STL deque et stack |
|
|
Michel Michaud wrote:
| Quote: | Dans news:cbcj6n$6r4$1 (AT) news-reader3 (DOT) wanadoo.fr, Loïc
Joly <loic.actarus.joly (AT) wanadoo (DOT) fr> a écrit :
Franck Branjonneau wrote:
2/ Oui j'utilise des std::vector<> pour mes piles ; non pas des
std::deque<>. Et là je m'interroge. Le std::deque<> ne fait-il
pas une meilleure gestion de la mémoire que le std::vector
lors d'utilisations répétées de push()/pop() ?
Tu parlerais de queues, je serais d'accord, mais pour des
piles, vector me semble meilleur avec les cas d'utilisation
classiques.
Tu peux expliquer ? Parce que d'après moi, la norme ne choisit pas
std::deque pour rien, par défaut, dans std::stack. La gestion de
mémoire sera plus efficace avec deque. Son seul défaut général par
rapport à vector est l'accès aux éléments qui est un peu moins
direct que pour vector, mais pour une pile, il n'y a d'accès qu'à
un élément qui est facile si on garde l'itérateur...
|
Je me suis mal exprimé. Je voulais dire que dans le cas d'un stack,
deque ou vector étaient AMA très proches l'un de l'autre, et donc
dépendent du profil d'utilisation, alors que dans le cas d'une queue, le
choix de deque s'imposait clairement.
Par exemple, si la taille d'un bloc de deque est de 100(*), que l'on ne
supprime un bloc que quand il y a deux blocs vides, et que le profil
d'utilisation est d'ajouter n éléments puis d'en enlever n, (n>100)
alors il y aura sans cesse des allocations mémoires, alors qu'avec
vector, il n'y aura des allocations que la première fois.
Réciproquement, si une fois, la pile contient 10000000 membres, mais par
la suite, elle en contient 3 au plus, deque briellera devant vector.
(*) D'ailleurs, le fait que dans un soucis de généricité et
d'encapsulation la norme de parle pas de la taille d'un bloc et ne
permettre pas de la fixer me semble un peu dommage.
--
Loïc
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Wed Jun 30, 2004 11:34 am Post subject: Re: STL deque et stack |
|
|
"Michel Michaud" <mm (AT) gdzid (DOT) com> writes:
| Quote: | Dans news:cbcj6n$6r4$1 (AT) news-reader3 (DOT) wanadoo.fr, Loïc
Joly <loic.actarus.joly (AT) wanadoo (DOT) fr> a écrit :
Franck Branjonneau wrote:
2/ Oui j'utilise des std::vector<> pour mes piles ; non pas des
std::deque<>. Et là je m'interroge. Le std::deque<> ne fait-il
pas une meilleure gestion de la mémoire que le std::vector
lors d'utilisations répétées de push()/pop() ?
Tu parlerais de queues, je serais d'accord, mais pour des
piles, vector me semble meilleur avec les cas d'utilisation
classiques.
Tu peux expliquer ? Parce que d'après moi, la norme ne choisit pas
std::deque pour rien, par défaut, dans std::stack. La gestion de
mémoire sera plus efficace avec deque. Son seul défaut général par
rapport à vector est l'accès aux éléments qui est un peu moins
direct que pour vector,
|
C'est simple, j'ai implémenté un interpréteur de mini-PostScript en
forme de bibliothèque. PostScript est un langage qui utilise
abondamment la pile -- presque tout se passe sur la pile. J'ai besoin
d'indexer arbitrairement dans la pile. Il n'y a aucune raison pour que
cela coûte plus cher que d'indexer dans un tableau.
Si j'écris un compilateur C++, la recherche de noms est quelque choses
de fréquent. En première approximation, les portées s'emboîtent -- et
se comportent comme une pile. L'accès aux portées englobantes ne doit
pas coûter plus cher que d'indexer un tableau. Si c'est pas possible,
c'est que std::stack<> ne convient pas.
| Quote: | mais pour une pile, il n'y a d'accès qu'à
un élément qui est facile si on garde l'itérateur...
|
Bah *non*. C'est une erreur.
-- Gaby
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|