OVH Cloud OVH Cloud

Liste circulaire

6 réponses
Avatar
Etienne Rousee
Bonjour,

Quel est la bonne méthode pour implémenter une liste
chaînée circulaire en utilisant la STL ?

Etienne

6 réponses

Avatar
Alexandre
"Etienne Rousee" a écrit dans le message de
news:bovfvc$ted$
Bonjour,

Quel est la bonne méthode pour implémenter une liste
chaînée circulaire en utilisant la STL ?

Etienne


Il me semble plus simple de la coder directement.
La liste de la STL est linéaire, pas évident de l'utiliser simplement pour
faire une liste circulaire.

Avatar
Etienne Rousee
"Alexandre" a écrit ...
"Etienne Rousee" a écrit dans le message de
news:bovfvc$ted$
Bonjour,

Quel est la bonne méthode pour implémenter une liste
chaînée circulaire en utilisant la STL ?

Etienne


Il me semble plus simple de la coder directement.
La liste de la STL est linéaire, pas évident de l'utiliser simplement pour
faire une liste circulaire.

Mon but n'est pas de faire une liste circulaire, là pas de problème,

mais d'essayer de montrer l'intérêt de la STL dans un but pédagogique.
Et justement, le cas de la liste circulaire m'interesse.
Bien sûr, j'aurais la même question pour d'autres structures (arbres ..)

Etienne


Avatar
Michel Michaud
Dans news:bp3ht5$kjf$, Etienne
"Alexandre" a écrit ...
"Etienne Rousee" a écrit dans le
message de news:bovfvc$ted$
Bonjour,

Quel est la bonne méthode pour implémenter une liste
chaînée circulaire en utilisant la STL ?

Etienne


Il me semble plus simple de la coder directement.
La liste de la STL est linéaire, pas évident de l'utiliser
simplement pour faire une liste circulaire.

Mon but n'est pas de faire une liste circulaire, là pas de problème,

mais d'essayer de montrer l'intérêt de la STL dans un but
pédagogique.


Alors il faut prendre STL dans son vrai sens : ce que Stepanov et Lee
ont fait, à savoir fournir un modèle à suivre qui permet de combiner
les algorithmes génériques avec des collections génériques, au travers
des itérateurs. En clair, il faut oublier la SL (la bibliothèque de
C++) et faire ta propre classe dans le modèle STL. Ce n'est pas si
compliqué, mais tu trouveras que tu auras des choix à faire dans ton
implémentation, choix presque arbitraire -- en particulier, quelles
fonctions y mettre--, ce qui explique peut-être pourquoi il n'y a pas
de liste circulaire dans la SL.

Et justement, le cas de la liste circulaire m'interesse.
Bien sûr, j'aurais la même question pour d'autres structures
(arbres ..)


Oh ! Pour les arbres c'est vraiment plus complexe de choisir ce
qu'on voudrait vraiment. Voir la discussion sur clc++m...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/



Avatar
Gabriel Dos Reis
"Michel Michaud" writes:

| Alors il faut prendre STL dans son vrai sens : ce que Stepanov et Lee
| ont fait, à savoir fournir un modèle à suivre qui permet de combiner
| les algorithmes génériques avec des collections génériques, au travers
| des itérateurs. En clair, il faut oublier la SL (la bibliothèque de
| C++) et faire ta propre classe dans le modèle STL. Ce n'est pas si
| compliqué,

La dernière fois que j'ai essayé (~ 1999), je voulais implémenter une
structrure de données pour manipuler des formes topologiques et
géométriques (en representant les domaines par des listes circulaires
des éléments de bords), je me suis rendu compte qu'il y a un leger
snag : la STL utilise essentiellement la notion d'intervalle
semi-ouvert, fermé à gauche et ouvert à droite. Si on manipule des
listes circulaires, le truc naturel à prendre ce sont des intervalles
fermés et non semi-ouverts. À l'époque, il était plus rentable pour
moi d'ignorer complètement la STL pour ce genre de truc. Je n'ai pas
ressayer récemment, mais j'ai impression que le résultat ne seraitpas
très utilisable en pratique.

-- Gaby
Avatar
Michel Michaud
Dans news:, Gabriel Dos
"Michel Michaud" writes:

Alors il faut prendre STL dans son vrai sens : ce que Stepanov et
Lee ont fait, à savoir fournir un modèle à suivre qui permet de
combiner les algorithmes génériques avec des collections
génériques, au travers des itérateurs. En clair, il faut oublier
la SL (la bibliothèque de C++) et faire ta propre classe dans le
modèle STL. Ce n'est pas si compliqué,


La dernière fois que j'ai essayé (~ 1999), je voulais implémenter
une structrure de données pour manipuler des formes topologiques et
géométriques (en representant les domaines par des listes
circulaires des éléments de bords), je me suis rendu compte qu'il y
a un leger
snag : la STL utilise essentiellement la notion d'intervalle
semi-ouvert, fermé à gauche et ouvert à droite. Si on manipule des
listes circulaires, le truc naturel à prendre ce sont des
intervalles fermés et non semi-ouverts. À l'époque, il était plus
rentable pour
moi d'ignorer complètement la STL pour ce genre de truc. Je n'ai pas
ressayer récemment, mais j'ai impression que le résultat ne
seraitpas très utilisable en pratique.


C'est un problème intéressant... Mais comme je le disais, il y a
effectivement des choix à faire. Et peut-être que certains de
ces choix seront forcés par la « manière STL ». Je crois que je
vais retenir l'idée, pour y voir un jour :-)

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Avatar
Etienne Rousee
"Michel Michaud" a écrit ...
Alors il faut prendre STL dans son vrai sens : ce que Stepanov et Lee
ont fait, à savoir fournir un modèle à suivre qui permet de combiner
les algorithmes génériques avec des collections génériques, au travers
des itérateurs. En clair, il faut oublier la SL (la bibliothèque de
C++) et faire ta propre classe dans le modèle STL. Ce n'est pas si
compliqué, mais tu trouveras que tu auras des choix à faire dans ton
implémentation, choix presque arbitraire -- en particulier, quelles
fonctions y mettre--, ce qui explique peut-être pourquoi il n'y a pas
de liste circulaire dans la SL.


Dommage, j'aurais aimé une STL plus complète :)
Pour ce qui est de la liste circulaire, il ne me semble pas qu'il y ait
beaucoup de choix dans les fonctions: les mêmes que pour les listes
ordinaires, la seule différence étant dans la gestion de l'incrémentation
et la décrémentation des itérateurs aux extrémités.

Oh ! Pour les arbres c'est vraiment plus complexe de choisir ce
qu'on voudrait vraiment. Voir la discussion sur clc++m...


Et il y a arbres binaires et non binaires.
Bon, je vais voir clc++m.
Merci.

Etienne