IMPLEMENTATION STL (LIST)

magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 6 sept. 2005 à 23:29
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008 - 25 sept. 2005 à 09:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33675-implementation-stl-list

Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
25 sept. 2005 à 09:25
Merci :-)
sbeuz Messages postés 6 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 23 septembre 2005
23 sept. 2005 à 22:27
La methode est interessante :)
De + tu utilises une classe plutôt qu'une variable de type structuré. A++
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
8 sept. 2005 à 18:54
Ha, ok merci :)
J'avais pas fait gaffe...
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
8 sept. 2005 à 09:27
évidemment....

=>mémoriser le ptr suivant avt de libérer l'elt...
DubbleM Messages postés 2 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 8 septembre 2005
8 sept. 2005 à 08:14
Analyson ta liberation de mémoire dans le destructeur (imaginons que l'on enlève ton commentaire):

for(; Temp !0 ; Temp Temp->Next)
free(Temp);

Que ce passe-t-il à l'exécution
1) première partie du for initialisation : rien car for(;...)
2) Teste de fin Temp!=0 (temp est rempli plus haut, imaginons qu'il y ai 2 elements donc temp!=0
3) tu libère la mémoire sur la quelle temp pointe (free Temp)
4) tu viens à la 3ème partie du for Temp=Temp->Next mais Temp (partie de droite) n'est plus alloué car tu a fait free, ton problème est a mon avis à ce niveau. Faudrait peut-être penser à sauver Temp->Next avant le free.
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
7 sept. 2005 à 19:22
oui : liste doublement chainée pour simuler les classes LIST de la STL...
Zazour Messages postés 120 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 14 janvier 2006
7 sept. 2005 à 18:10
ok,j'ai posté un peu vite en ne regarde pas le contenu,mais je regarderai ta source,cela parle de liste chainée.
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
7 sept. 2005 à 16:24
Zazour : c'est juste un petit exercice que j'ai posté pour les débutants, c'est une implementation...
Dans ce code je me suis servi des listes doublement chainées en C, ça peut apprendre a mieux s'en servir, d'autres personnes peuvent reprendre mon code et rajouter des fonctionnalistes (classement alphabet, etc..., CF BListeIndir de magic_nono).

C'ests ur que dans un projet, tu vas pas recoder une classe List, tu utiliseras direct la STL :)
Bye !
Zazour Messages postés 120 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 14 janvier 2006
7 sept. 2005 à 15:32
pourquoi faire une classe "list" à la place d'utiliser directement "list" de la STL?
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
7 sept. 2005 à 13:13
Magic_nono : Ok, merci... je vais corriger ça :)
Marik7335 : Ok j'implemente je vais implementer les iterateurs des que j'aurais le temps :)

Encore merci a tous pour vos commentaires
marik7335 Messages postés 115 Date d'inscription samedi 27 décembre 2003 Statut Membre Dernière intervention 11 mai 2009
7 sept. 2005 à 12:45
C'est pas mal, le concept est intéressant. Par contre, la class list de la STL implémente les itérateurs. ça serait intéressant de le faire.
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
6 sept. 2005 à 23:29
Bien

prend l'habitude de distinguer les variables membres de tes classes:
par exemple, l'usage est de les préfixer par 'm_'

de plus, évite les données publiques (tout comme tu évites déjà les variables globales)

cela donnerai qqch comme ça

template <typename T>
class List
{
private:
typedef struct Link // Struct for linked list
{
T Value; // Value of new object

Link *Next;
Link *Prev;
}Link;
Link *m_End;
Link *m_Temp;
Link *m_Head;

public:
...
}

et vérifie que m_Temp soit vraiement util.



Pour poursuivre plus loin
tu peux te reporter sur BListeIndir qui est publié dans mes sources.

Bonne prog
Nono.



PS

qq rq sur ton constructeur, pour t'aider à reprendre ta classe

# template <typename T>
# List<T>::List() /* Constructor */
# {
# Head = (Link *)malloc(sizeof(Link)); /* Prepare the list */
# Head->Next = 0;
# Head->Prev = 0;
# Head->Value = 0;
#
# End = Head;
//là tu as égalisé end & head (c'est le mm élément)
//la suite est donc inutile
# End->Next = 0;
# End->Prev = 0;
# }


pour le destructeur enfin

template <typename T>
List<T>::~List() // Destructor
{
Link* temp;
for( temp= Head;temp;temp=temp->Next)
free(temp);
}


si tout le reste est bon, y a pas de raison que ça ne passe pas.
Rejoignez-nous