IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

utilisation du conteneur pair


Sujet :

SL & STL C++

  1. #1
    Membre confirmé
    Profil pro
    Ingénieur Développement
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Développement

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut utilisation du conteneur pair
    Bonjour,
    je réalise un programme capable de jouer au jeu Agora.
    le jeu se constitue d'un plateau rectangulaire.
    pour jouer un coup, on déplace d'une case à l'autre puis on se met soit au dessus soit en dessous des pions existant sur la case.
    j'ai une classe plateau et une classe coup pour l'instant.
    Je voudrais savoir si ma structure de données pour un coup est juste.
    j'utilise le conteneur pair de la stl.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class coup {
     
    private:
     
    pair<int,int> position; //position d'un pion sur un plateau
     
    pair<position,position> positions; // couple position de départ et position d'arrivée
     
    pair<positions,bool> c;// coup est représenté par une position de départ et une position d'arrivée plus un bool dessus/dessous
     
    vector<c> listedescoups;//  vecteur liste des coups
    //constructeurs et selecteurs
    coup() {}
    coup(int lignedepart, int coldepart, int lignearrivee, int colarrivee, bool dessus) : 
    c(positions(position(lignedepart, coldepart), position(lignearrivee, colarrivee)), dessus) {}
    En fait je voudrais savoir si c'est suffisant de déclarer mes types 'postion' et 'positions' comme je l'ai fait ou est ce qu'il faut que je créer des classes qui leur correspondent.

    merci

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Citation Envoyé par zakalova Voir le message
    En fait je voudrais savoir si c'est suffisant de déclarer mes types 'postion' et 'positions' comme je l'ai fait ou est ce qu'il faut que je créer des classes qui leur correspondent.
    Ca dépend de ce que tu entend par "c'est suffisant".
    Si tu veux juste que ça compile et que ça marche, alors oui, c'est suffisant.
    Si tu souhaites aller plus loin (notamment utiliser des 'position' et des 'positions' comme des types), alors non, ce n'est pas suffisant.

    Dans ton code, position et positions sont des variables membres de ta classe Coup, donc uniquement utilisables en tant que tel.

    Hope it helps.

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par r0d Voir le message
    Bonjour,

    Ca dépend de ce que tu entend par "c'est suffisant".
    Si tu veux juste que ça compile et que ça marche, alors oui, c'est suffisant.
    ?? manque pas des typedef???

    Citation Envoyé par r0d Voir le message
    Si tu souhaites aller plus loin (notamment utiliser des 'position' et des 'positions' comme des types), alors non, ce n'est pas suffisant.

    Dans ton code, position et positions sont des variables membres de ta classe Coup, donc uniquement utilisables en tant que tel.

    Hope it helps.
    +1

  4. #4
    Membre confirmé
    Profil pro
    Ingénieur Développement
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Développement

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut
    ok,

    donc si je mes des typedef, est ce que je pourrai les utiliser comme des types?
    merci

  5. #5
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    ?? manque pas des typedef???
    Hum... tu me fais douter... mais je crois bien que oui. Mais je peux pas tester de suite, j'ai cassé gcc

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Il me semble bien que ce que voudrait faire le PO c'est bien mettre des typedef devant 'positions' etc...

  7. #7
    Membre confirmé
    Profil pro
    Ingénieur Développement
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Développement

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut
    salut
    j'ai mis des typesdef mais je ne peux pas encore tester
    donc voilà à quoi ressemble mon fichier coup.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <vector>
    #include <iostream>
    #includ <utility>
    #include <deque>
    using namespace std;
     
    class Coup {
     
    private:
     
    typedef pair<int,int> Position; //position d'un pion sur un plateau
     
    typedef pair<Position,Position> Positions; // couple position de départ et position d'arrivée
     
    pair<Positions,bool> c;// coup est représenté par une position de départ et une position d'arrivée plus un bool dessus/dessous
     
    typedef vector<c> Listedescoups;//  vecteur liste des coups
     
    bool dessus;
     
    public:
     
    //constructeurs 
    Coup() {}
    Coup(int lignedepart, int coldepart, int lignearrivee, int colarrivee, bool dessus) ; 
    c(Positions(Position(lignedepart, coldepart), Position(lignearrivee, colarrivee)), dessus) {}
     
    //selcteurs et accesseurs
    int getlignedepart() const {
        return c.first.first.first;
      }
    int getcoldepart() const {
        return c.first.first.second;
      }
    int getlignearrivee() const {
        return c.first.second.first;
      }
    int getcolarrivee() const {
        return c.first.second.second;
      }
     
    friend ostream& operator<<(ostream& o, const Coup& c);
    friend istream& operator>>(istream& i, Coup& c);
     
    };
    est ce que ça à l'air potable tout ça? merci

  8. #8
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    je n'ai pas regardé dans le détail, mais quelques remarques:

    -> Je ne sais pas si c'est un problème de copier/coller, mais ton code n'est pas indenté. C'est trés important d'indenter son code. Voir ce post

    -> Tu déclare tes typedef à l'intérieur de ta classe. Cela signifie que ces types ne sont accessibles que dans la portée de cette classe. Techniquement, ça ne fais pas de grande différence, mais sémantiquement, cela signifie qu'ils sont fortement liés à cette classe. Est-ce vraiment ce que tu souhaites?

    -> La ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c(Positions(Position(lignedepart, coldepart), Position(lignearrivee, colarrivee)), dessus) {}
    N'a aucun sens. Je ne sais pas trop ce que tu veux faire, mais là tu confond ta variable membre c, qui est une paire, et ton vecteur Listedescoups.

  9. #9
    Membre confirmé
    Profil pro
    Ingénieur Développement
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Développement

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut
    Bonjour,
    merci pour le conseil je vais intendé le code.
    pour ce qui est de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c(Positions(Position(lignedepart, coldepart), Position(lignearrivee, colarrivee)), dessus) {}
    il manquait les deux points ':' juste avant la lignedans le code, en fait c'est comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Coup(int lignedepart, int coldepart, int lignearrivee, int colarrivee, bool dessus) :
    c(Positions(Position(lignedepart, coldepart), Position(lignearrivee, colarrivee)), dessus) {}
    En fait mon projet consiste à réaliser d'un programme qui joue au jeu Agora. Donc j'ai deux classes principales, une classe Plateau qui représente le plateau du jeu et une classe Coup.
    je ne suis pas sur de la syntaxe mais c'est pour construire mon Coup c.
    je veux dire que un coup c est une paire il est constitué d'une ligne et colonne de départ que je stock dans une Position puis d'une ligne et colonne d'arrivée que je stock aussi dans une Position. je stock les deux Position dans une paire Positions et tout ça constitue le premier element de la paire c. le deuxième élément est le booléen qui dit si le pion et au dessus ou au dessous du pion ennemi.
    la manière dont j'ai définie mes accesseurs va avec mais je ne sais pas si c'est juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int getlignedepart() const {
        return c.first.first.first;
      }
    int getcoldepart() const {
        return c.first.first.second;
      }
    int getlignearrivee() const {
        return c.first.second.first;
      }
    int getcolarrivee() const {
        return c.first.second.second;
      }
    Merci

  10. #10
    Invité
    Invité(e)
    Par défaut
    Est-ce que je sens une influence lispienne? :-)

    Plutôt que d'utiliser une "paire" pour représenter tous les couples qui interviennent dans ton problème, tu gagnerais à définir des classes spécialisées. Tu vas forcément finir par t'emmêler les pinceaux avec des "first.second.second.first.second.first" comme ça...

    (car l)

  11. #11
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Je dirais même pire, ça sent un couplage fort. Avoir des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetA.getObjetB().setTemperature(getTempFromReceptor() );
    c'est pas bon du tout !
    Une bonne règle c'est qu'une classe ne doit connaitre que le minimum d'une autre classe... Or là avec des first.second.first, on commence à engranger de la connaissance !

  12. #12
    Membre confirmé
    Profil pro
    Ingénieur Développement
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Développement

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut
    Merci pour les conseils,
    une question, est ce que le code comme j'ai fait marchequand même ou pas?
    car je n'utilise les "c.first....." que pour avoir les positions de depart et d'arrivée. je ne les utilise pas beaucoup en fait donc pour moi il n'y a pas confusion entre les diffirents accesseurs

  13. #13
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Oui ça va marcher, ce que je veux te dire ici (comme 5hdumatin), c'est qu'une paire d'une paire d'une paire, ça commence à devenir compliqué.
    Tu gagnerais à écrire ta propre classe qui aurait le bon comportement...

  14. #14
    Membre confirmé
    Profil pro
    Ingénieur Développement
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Développement

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut
    ok je comprends
    c'est clair que des classes c'est plus simple
    je tiens au courant si j'ai des soucies :p
    à+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation du conteneur léger du framework Indigo
    Par freegreg dans le forum Flex
    Réponses: 0
    Dernier message: 25/01/2009, 00h11
  2. Réponses: 5
    Dernier message: 18/11/2008, 10h39
  3. cable torsadé : utilisation de deux paires seulement
    Par devlopassion dans le forum Hardware
    Réponses: 8
    Dernier message: 10/03/2008, 15h51
  4. utiliser des conteneurs triés stl pour pointeurs, utile?
    Par Pacorabanix dans le forum SL & STL
    Réponses: 13
    Dernier message: 08/12/2007, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo