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.
si tu as regardé (la class pair, et/ou l'inversion des arguments )
la fonction est équivalene à la tienne.
bool Comparer( const CPerso& lhs, const CPerso& rhs )
{
return (lhs.TileY < rhs.TileY)
|| !(rhs.TileY < lhs.TileY) && ( lhs.dY < rhs.dX );
}
voilà, tu n'as besoin de ne définir que l'opérateur < sur
CPerso ( grâce au ! et l'inversion des arguments )
sinon c'est partial_sort_copy qui n'utilise qu'un InputIteractor
(honnêtement je ne l'utilise jamais) et non partial_sort
Je crois que partial_sort permet de faire quelque chose.
Pour les références automatiques, rien à faire.
Pour la relation d'équivalence, j'suis trop fatigué pour relire. demain.
mais dans le include il faut regarder l'opérateur < pour
les paires par exemple.
(sinon dans la pratique, je la code comme toi à quelques détails près).
regarde bien, mes deux premiers tests passés, il n'y a plus qu'une possibilité: a.TileY == b.TileY
du coup je vérifie la sous position (en fait, dY est une variable qui "affine" la position du perso à l'intérieur d'une grande case nommée Tile). utiliser !(...<...) ne produirait pas l'effet voulu, puisqu'en cas de TileY équivalents, dY ne serait pas utilisé pour déterminer plus précisément l'ordre des persos.
je ne savais pas que sort ne pouvais pas traiter les list, pq on a besoin d'un itérateur aléatoire? je trouve ça étonnant...
pr les référence je suis d'accord, mais comment je suis sensé faire comprendre ça à sort? les conteneurs contiennent des objets, pas des pointeurs (ni des références).
Kirua >
1. sort() ne permet pas de trier les lists ( pas d'itérateur à
accès aléatoire )
2. beaucoup mieux de passer une référence constante pour Comparer
bool Comparer( const CPerso& lhs, const CPerso& rhs )
3. Les puristes préférent utiliser uniquement < dans le compare
du style x<y puis !(y<x )
sauf erreur de ma part of course ;-)
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.