C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

STL deque et stack
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
heinquoi
Guest





PostPosted: Mon Jun 14, 2004 11:14 pm    Post subject: STL deque et stack Reply with 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.
--
Cordialement,
Heinquoi


Back to top
Loïc Joly
Guest





PostPosted: Tue Jun 15, 2004 5:31 am    Post subject: Re: STL deque et stack Reply with quote



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





PostPosted: Tue Jun 15, 2004 9:29 am    Post subject: Re: STL deque et stack Reply with quote




"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





PostPosted: Tue Jun 15, 2004 7:36 pm    Post subject: Re: STL deque et stack Reply with quote

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





PostPosted: Thu Jun 17, 2004 4:37 pm    Post subject: Re: STL deque et stack Reply with quote

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





PostPosted: Fri Jun 18, 2004 10:22 pm    Post subject: Re: STL deque et stack Reply with quote

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





PostPosted: Sat Jun 19, 2004 7:35 pm    Post subject: Re: STL deque et stack Reply with quote

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





PostPosted: Sun Jun 20, 2004 9:32 am    Post subject: Re: STL deque et stack Reply with quote

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





PostPosted: Mon Jun 21, 2004 8:15 pm    Post subject: Re: STL deque et stack Reply with quote

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





PostPosted: Wed Jun 23, 2004 6:24 pm    Post subject: Re: STL deque et stack Reply with quote

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





PostPosted: Wed Jun 23, 2004 6:47 pm    Post subject: Re: STL deque et stack Reply with quote

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





PostPosted: Fri Jun 25, 2004 1:20 am    Post subject: Re: STL deque et stack Reply with quote

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





PostPosted: Sat Jun 26, 2004 2:22 pm    Post subject: Re: STL deque et stack Reply with quote

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





PostPosted: Wed Jun 30, 2004 4:48 am    Post subject: Re: STL deque et stack Reply with quote

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





PostPosted: Wed Jun 30, 2004 11:34 am    Post subject: Re: STL deque et stack Reply with quote

"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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.