Design pattern strategy, tri et stl vector

Soyez le premier à donner votre avis sur cette source.

Vue 12 067 fois - Téléchargée 999 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_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
7 mars 2004 à 19:41
je trouve qu'il y a beaucoup de fichier pour pas grand chose... tout ce n'est pas clair, ca manque un peu de commentaire je trouve !!!
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
8 mars 2004 à 16:39
c'est bien d'avoir créé ton propre système d'algo. mtnt pr les amoureux de la STD/STL (comme moi ^^), il y a l'en-tête qui gère tt ça comme un chef :-)
cs_cppman Messages postés 2 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 9 mars 2004
8 mars 2004 à 21:52
Salut Kiria ! Pourrais-tu me donner un peu plus de détails sur . Je suis en train de simplifier l'exemple qui s'intitulera strategy2 et qui fait intervenir des itérateurs et de le commenter.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
8 mars 2004 à 22:04
Hmm, je vais te dire dans quel cadre j'ai utilisé cet en-tête. J'avais une liste (assez variable) d'objets de ma création (CPerso, une class) stockés dans un vector (STL). Tu vois à quel point les algos de l'en-tête sont flexibles: ça marche avec n'importe quel type d'objet!

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 ;-)
cs_cppman Messages postés 2 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 9 mars 2004
9 mars 2004 à 00:27
Merci Kirua

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)