Design pattern strategy, tri et stl vector

Soyez le premier à donner votre avis sur cette source.

Vue 11 319 fois - Téléchargée 641 fois

Description

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.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Kirua
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008
-
okok, j'ajoute ça à ma liste de TO DO, thx.
Hylvenir
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2 -
So... pour la relation d'équivalence.
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
Hylvenir
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2 -
Pour l'accès aléatoire, c'est lié à la manière de trier du 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).
cs_Kirua
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008
-
Hylvenair, en rapport à ta 3ème remarque, ta solution n'est pas acceptable.

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).
Hylvenir
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2 -
Salut,
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.

Du même auteur (cs_cppman)