Compilateur: Visual C++ 6
Utilisation: dans DOS, se placer dans le dossier contenant le binaire strategy1.exe et taper Strategy1 suivit de la liste d'entiers à trier en séparant chaque entier d'un espace, validez et choisissez la méthode de tri.
Exemple: D:\>strategy1 5 1 6 2
Le Design Pattern 'Strategy' permet de séparer les algorithmes, en les encapsulant, de son contexte d'utilisation. Cet exemple montre un exemple d'implémentation de ce design pattern en faisant intervenir la STL vector et ayant pour but de trier un tableau d'entiers (vector<int>) en utilisant soit un algorithme de tri classique soit un tri à bulle. L'inconvénient de cet exemple est que les algorithmes de tri sont dépendants des conteneurs (vector, liste, ...). C'est pourquoi une seconde version de cet exemple utilisera les itérateurs afin de rendre les algorithmes indépendants des conteneurs.
7 mars 2004 à 19:41
8 mars 2004 à 16:39
8 mars 2004 à 21:52
8 mars 2004 à 22:04
j'ai utilisé la fonction "sort()" qui trie (on s'en doute) ton vector, ta liste, ton tableau dynamique/statique, ton stack... (peu importe, ça marche avec tout ça!) par ordre CROISSANT en utilisant l'opérateur d'infériorité de l'objet utilisé (dans mon cas (CPerso), comme je voulais dessiner les personnages dans un certain ordre, j'ai juste définis l'opérateur < en fonction de la position verticale))
Note que tu n'es pas obligé de définir l'opérateur "<" pour tes types d'objets. Tu peux aussi fournir à la fonction sort une fonction de tri. Ce foncteur (comparateur) doit retourner true si son premier paramètre est "inférieur" au second.
Pour des types intégrés comme int, float, double, char (bool je sais pas) et leurs dérivés (unsigned, long ...) tu ne dois évidemment pas redéclarer les foncteurs ou les opérateurs!
Tiens, pour que tu vois à quoi ça ressemble, moi j'ai utilisé un comparateur que j'ai définit comme membre static de CPerso:
static bool Comparer(CPerso a, CPerso b)
{
if(a.TileY < b.TileY) return true;
if(a.TileY > b.TileY) return false;
return (a.dY < b.dY);
}
(l'intérieur, ça dépend de ton type bien sûr)
et j'appelle sort comme ça:
sort(PNJ.begin(), PNJ.end(), CPerso::Comparer);
avec en premier paramètre un itérateur qui pointe sur le premier élément de la séquence à trier et en deuxième paramètre un itérateur qui pointe sur le dernier élément de la séquence à trier (ça te permet de ne trier qu'une sous partie d'un tableau).
Le troisième paramètre est facultatif, c'est un pointeur (je pense) sur la fonction de comparaison.
Bon amusement ;-)
9 mars 2004 à 00:27
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.