tableau pour un accès rapide et régulier de données? [Builder6] - C++ - Programmation
Marsh Posté le 20-04-2004 à 03:08:33
(NomStructure NomVar [10000])
déjà une taille statique en pile, c'est nulle. std::vector sera bien mieux
sinon, non aucun accès plus rapide que l'accès direct a[i]
Marsh Posté le 21-04-2004 à 23:34:21
Merci pour la réponse.
OK, je viens de me renseigner un peu, j'arrive à faire un vecteur ou une liste à partir de ma structure. C'est vrai que l'allocation dynamique est bien mieux.
Mais comment puis-je chercher maintenant un de mes individus a partir de ses caracteristiques, ce que je faisais avant en parcourant la structure[10000] et m'arretant quand individu[x].Age==2 par ex.?
Marsh Posté le 23-04-2004 à 12:35:32
Ok, merci pour ça. Je commence à maitriser un peu ces containers, j'ai essayé les maps, lists, vectors en stl. Maintenant le problème est: lequel choisir???
pour info, je n'ai pas vraiment besoin d'ordonner mes entrées, mais je parcours régulièrement la liste complète et j'ai souvent besoin d'accès direct à certaines entrées correspondant à certains critères.
D'après ce que j'ai lu, les maps ont l'air plus adéquats, vous confirmez?
Marsh Posté le 23-04-2004 à 22:45:19
correspondant à des valeurs precises des variables de la structure.
ex: if (individu.age="adulte" && individu.sex="F" ) GoFindAMaleAndBreed();
Marsh Posté le 23-04-2004 à 23:15:43
Code :
|
allez grosse tartine, c'est dur à croire mais je l'ai même pas compilé. à part des erreurs de typos, je ne vois pas de problèmes à priori. Bien sur on peu améliorer les classes en mettant des membres const en en définissant bien la totalité de la forme de coplien.
Marsh Posté le 24-04-2004 à 07:34:18
WOW! impressionant! mais il va me falloir un p'tit moment pour digérer ça... On dirait presque un autre language pour moi! je ne suis pas certain que Builder6 va avaler tout ça comme ça, mais je vais essayer.
Merci encore vieille saucisse!
Marsh Posté le 24-04-2004 à 11:15:02
ben c'est du C++ et pas le C avec cout+class que tu faisais jusqu'à présent.
Marsh Posté le 26-04-2004 à 12:16:28
je parlais plutot de inline, enum, fetch... que je n'ai jamais encore utilisés. Et je n'utilise jamais de cout avec Builder comme il n'y a pas de fenêtre output.
Je ne suis pas encore arrivé à déchiffrer ton code, mais est-ce qu'il est facilement généralisable à plus de 2 variables (autres que age et sexe) car j'en ai un certain nombre?
J'ai essayé d'utiliser les lists, mais comment fais-tu pour passer un iterateur à une fonction (ou un qui est déréferencé) ? Pour être plus précis, j'ai une fonction qui cherche l'enregistrement que je veux dans la liste, et j'aimerais qu'elle file l'iterateur à une autre fonction qui fait quelque chose avec l'enregistrement trouvé (c'est clair?). Je ne sais pas comment faire, mes essais ont été infructueux jusqu'à maintenant (tiens tiens, bizarre bizarre...)
cout<<"please help me!..."
Marsh Posté le 26-04-2004 à 22:55:49
c'est pour ca... je suis passé directement par la case C++...
et pour ma question sur le passage d'un iterateur à une fonction??? Aidez-moi SVP, je suis vraiment au point mort et ca commence à faire... Ca doit être simple pour des experts comme vous!
Marsh Posté le 27-04-2004 à 01:19:10
je vois pas le problème avec le passage d'itérateur à une fonction
Marsh Posté le 27-04-2004 à 03:36:37
ouais ben moi non plus a priori... mais le compilateur me traite de programmeur obsolète ou me lance une Declaration Syntax Error.
Tant pis, je vais jouer avec un seul iterateur en global, la fonction Find va le laisser là où la condition est satisfaite et va il être récupéré par l'autre fonction qui fait un truc à son emplacement, sans avoir à l'appeler en argument. Mais ca ne me semble pas être une bonne pratique...
Marsh Posté le 28-04-2004 à 23:02:19
j'ai tout changé maintenant, je ne suis pas vraiment en mesure de répéter ce que j'avais fait, mais en gros la déclaration de mes fonctions qui utilisaient les iterateurs en argument était:
void Function1 (int i, list <individuals, allocator < individuals > > It);
et il n'aimait pas ca.
Mais bon, j'utilise maintenant des iterateurs en global que mes fonctions placent et reprennent, et ca marche.
Mais ce n'est pas encore très optimisé, car quand ma liste a 20000 individus et que pour les faire se trouver un partenaire, il faut parcourir toute la liste pour chaque individu (20000*20000 = 400 millions d'iterations!!!) plus faire des calculs de distance... bref, ca rame à mort juste pour un petit truc.
des idées pour optimiser cela?
Le tri de listes est-il rapide? Car je pensais trier ma liste en fonction de l'habitat (chaque inidividu doit trouver sa partenaire dans le meme endroit), commencer a la premiere ligne qui correspond a l'habitat de l'individu1 incrementer jusqu'a ce que l'iterateur ne rencontre plus l'habitat recherché.
Mais lors de tri de liste, que deviennent mes iterateurs globaux, indiqueront-ils les même enregistrements qu'avant?
Marsh Posté le 28-04-2004 à 23:06:56
allocator < individuals >
pas la peine de le spécifier
passe par &
le tri de liste est ultra lent
utilise slist/set/queue/vector/priority_queue/map, etc
Marsh Posté le 28-04-2004 à 23:14:46
merci pour ta reponse utlra-rapide!
j'ai pas essayé encore avec &, mais sans allocator, ca ne marche pas. j'vais voir.
je voulais une map, mais ca ne marchait pas, p'tet qu'il faudrait que je re-essaye avec l'experience acquise ces quelques derniers jours...
Marsh Posté le 28-04-2004 à 23:35:31
sans allocators, ça marche ou alors t'as vraiment un compilateur de merde
Marsh Posté le 20-04-2004 à 03:06:28
Bonjour à tous,
Je développe une application de simulation de dynamique de populations d'oiseaux qui habitent des fragments de forêts. Pour stocker mes individus avec leurs caracteristiques (coordonnées x, y; habitat; age; sexe...), j'utilise une liste de structure (NomStructure NomVar [10000]) dont je fais souvent appel dans mon programme (ils meurent, bougent, se reproduisent...), j'appelle chaque individu par leur numero de ligne. Est-ce une bonne idée? Y a t-il de meilleures façons (pas trop compliquées) plus efficaces pour un accès régulier et rapide? Si oui, comment dois-je m'y prendre?
J'utilise une TListView pour afficher le contenu de ma structure, mais quand toutes mes lignes sont pleines, mon programme peine beaucoup... J'aimerais améliorer cela.
Merci d'avance.