Listes génériques ? [c'est OK !] [C] - C++ - Programmation
Marsh Posté le 05-07-2002 à 09:22:24
BB138 a écrit a écrit : Est-ce possible en C ??? En C++, il existe les template mais en C... |
Une liste d'objets en fait ?
Ben Tu peux faire ça :
Code :
|
Pis tu fais les fonction de gestion de ta liste.
Pis pour les donnees tu peux palcer ce que tu veux : entie, chaîne, tableau, strcuture, ...
Marsh Posté le 05-07-2002 à 09:43:28
Oui un truc comme ça me paraît assez sympa.
Mais alors il faudra que je (caste) à tour de bras... non ?
Marsh Posté le 05-07-2002 à 10:00:17
Les listes chaînées, ce n'est pas conseillé dans toutes les conditions. Si tu veux juste pouvoir accéder aux éléments séquentiellement dans un sens ou dans l'autre, c'est pas mal. Si tu veux pouvoir accéder à n'importe quel élément rapidement, c'est supra pourri.
Pour ma part, j'utilise beaucoup les tableaux dynamiques.
float *montableau; |
Puis quand tu veux rajouter une valeur :
if(remplissage_tab>=longueur_tab) |
Sans oublier le free(montableau) quand tu as fini.
Marsh Posté le 05-07-2002 à 10:05:49
BB138 a écrit a écrit : Oui un truc comme ça me paraît assez sympa. Mais alors il faudra que je (caste) à tour de bras... non ? |
Ben non.
Code :
|
Voilà, il faut que les donnees que tu ajoutes soient allouees dynamiquement. Pour l'effacement tu crées une fonction qui parcours la liste et efface tout les element et pour les donnees tu lui passes en parametre un pointeur sur une fonction qui s'en charge specifiquement : free en général si malloc.
Marsh Posté le 05-07-2002 à 10:25:33
Mais quand je veux récupérer :
element->donnees
il faudra bien que je fasse un truc du style :
Code :
|
ou alors éclaire ma lanterne...
>Jar Jar: il n'y a pas de problème, ce n'est que du séquentiel !
Marsh Posté le 05-07-2002 à 10:30:56
tu peux aussi le faire avec des macro:
Code :
|
un petit exemple toout con.
## sert à concaténer, après tu peux compliquer un peu.
J'ai fais une implémentation de pile générique comme ça il me semble.
C'est l'équivalent du template en C
Marsh Posté le 05-07-2002 à 10:44:05
Jar Jar a écrit a écrit : Les listes chaînées, ce n'est pas conseillé dans toutes les conditions. Si tu veux juste pouvoir accéder aux éléments séquentiellement dans un sens ou dans l'autre, c'est pas mal. |
Pour un accés sequentiel, un tableau ou un vector
c'est mieux (données contigues).
L'intérêt des listes c'est l'insertion en temps constant
et aussi le fait que tu l'ajout d'elements est sans limite et
que tu n'invalides pas tes pointeurs en cas de redimensionnement.
(contrairement au vector<> de la STL)
LeGreg
Marsh Posté le 05-07-2002 à 10:48:57
BB138 a écrit a écrit : Mais quand je veux récupérer : element->donnees il faudra bien que je fasse un truc du style :
|
Ben je ne sais pas (j'ai un doute).
Compile ton code et s'il te fait un erreur ou warning ben ajoute un cast !!!
Marsh Posté le 05-07-2002 à 11:08:17
Merci encore et on verra bien...
Je vous dirai tout ça quand j'aurai quelque chose de fonctionnel...
Marsh Posté le 05-07-2002 à 15:54:10
Voilà finalement ce que j'ai fait :
Code :
|
Il ne faut pas oublier la bonne fonction d'initialisation qui va bien !
Peut-être que je mettrai d'autres éléments (un tail par exemple histoire de rajouter des éléments a la fin plutôt qu'au début et plus peut-être).
Rq: le nb_el n'est pas indispensable pour une petite liste plus légère...
Marsh Posté le 05-07-2002 à 09:07:22
Est-ce possible en C ???
En C++, il existe les template mais en C...
Message édité par bb138 le 05-07-2002 à 16:00:40