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 :

problème avec les conteneurs STL


Sujet :

SL & STL C++

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 3
    Points
    3
    Par défaut problème avec les conteneurs STL
    Bonjour tout le monde, je suis un étudiant en informatique et je fais face à un problème que je n'arrive à résoudre. Voici mon problème, j'ai crée un vector de pair dont le 2 élements est une liste de pair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<pair<unsigned, list<pair<unsigned, char> > > >matriceLien;
    C'est en quelque sorte un matrice de lien qui me permet de définir les liens d'un échiquier. J'aimerais savoir comment je fais pour insérer dans le 1 élément et ensuite dans les autres. Est-ce que je dois insérer tout en même temps ou bien je peut le faire une par une?

    Pourriez-vous m'aider?

    Merci

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    vector<pair<unsigned, list<pair<unsigned, char> > > >matriceLien;
                                                  ^ ^ ^ ^
                                                  | | | |   
                                                  1 2 3 4
    Stop, stop, stop, avec déjà 4 niveaux d'imbrication de conteneur, je pense qu'il y a un petit problème de design avant tout.

    Il ne faut pas perdre de vue un principe essentielle pour une programmation saine en C++ : une classe - une responsabilité. Il faut isoler chaque élément du problème, pour en faire un découpage en classe simple, "atomique". En pratique, je pense qu'il faut que chaque classe ne dépasse pas plus de 10 fonctions membres, de pas plus de 50 lignes chacune, avec des conteneurs de pas plus de deux niveaux d'imbrication.

    Par exemple si c'est un problème d'échecs, il y a surement moyen de découper en classe Echiquier, Case, Pièce, Pion etc.

    Et pour répondre à la question initiale quand même
    Ben en fait je comprend pas très bien de quel 1er élément tu parles. Première élément du vecteur, de la liste, d'une paire, de matriceLien ?
    Si c'est pour le vecteur ou la liste, alors on insère généralement un par un, par des push_back, dans une boucle.
    Pour les paires, il y a une fonction de la STL très pratique : make_pair

  3. #3
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Un petit ajout :
    Par exemple, si la paire<unsigned, char> représente une case de l'échiquier (du style e4, e5, g7 etc.) alors autant en faire une classe !

    MatriceLien deviendrait :

    vector<pair<unsigned, list<Case> > > matriceLien;

    C'est déjà un peu plus clair, et surtout ça fait une std::pair en moins, ce qui donne un gain net en terme de lisibilité et d'expressivité du code. Tous les std::make_pair<unsigned, char>(...) deviennent en effet des Case(...) (le constructeur de Case) et tous les parcours de la liste avec un itérateur se transforment de it->first et it-> second en it->ligne() et it->colonne().

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Au fait, je n'ai pas le choix d'utiliser cette matrice, car cela fait partie des exigence du professeur et biensûr je suis au courant de make_pair. Ceci n'est pas un problème mais tous mes méthode ne fonctionne pas. Par exemple,

    vector<pair<unsigned, list<pair<unsigned, char> > > >matriceLien;
    |
    insérer dans la partie unsigned de la matriceLien et non la list fonctionne bien, mais par contre pour la liste cela ne fonctionne par,car il faudra que je fais un push_back, mais pour le reste je reste bloqué. Vous avez une idée?

  5. #5
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Cette structure là est imposée ? Pff quelle galère...
    Bon, vu que je ne comprends pas très bien ce que tu veux dire, peut être qu'un bout de code sera plus parlant :

    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
     
    #include <vector>
    #include <list>
    using namespace std;
     
    int main()
    {
       // un typedef, car j'ai la flemme d'écrire list<pair<machin... sans arrêt
       typedef list<pair<unsigned, char> > ListeUC;
     
       vector<pair<unsigned, ListeUC > > matriceLien;
     
       // insère une listeUC vide à l'index numéro 5
       matriceLien.push_back(make_pair<unsigned, ListeUC>(5, ListeUC())); 
     
       // on récupère une référence sur la listeUC que l'on vient de créer
       ListeUC& listeUC = matriceLien.back().second;  
     
       // et on remplit cette liste.
       listeUC.push_back(make_pair<unsigned, char>(5, 'e'));
       listeUC.push_back(make_pair<unsigned, char>(1, 'a'));
       listeUC.push_back(make_pair<unsigned, char>(7, 'f'));
     
       return 0;
    }

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut, et bienvenue sur le forum

    Pourrais tu, juste par curiosité personnelle, nous donner ici l'énoncé de ton exercice, parce que j'ai réellement l'impression qu'il y a des coups de pieds quelque part qui vont se perdre (pas chez toi, mais chez ton prof)

    S'il en vient à imposer une strucutre composée d'un vecteur de paire d'entiers et de liste de paire d'entier et de caractères, je crains fortement qu'il soit temps de lui rappeler les principes d'une conception simple
    [EDIT]A la limite, ce que je ferais éventuellement volontiers, comme un échiquier est composé de lignes identifiée de manière numérique (1 à 8) et de colonnes identifiées de manière alphanumérique (A à H), ce serait envisager de travailler avec une map proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::map<std::pair<int,char>,pion*> echiquier;
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Au fait, voici le site de web de l'énonce de mon travail pratique. En passant, ce n'est pas un échiquier comme l'on connait, mais un autre type de jeu.
    http://www.info2.uqam.ca/~chieze_e/INF3105.html
    section TP3
    Le conteneur, il a été donné dans la classe.

    Par contre, j'ai trouvé une solution J'utilise des first et des second, pour accéder aux éléments de mon conteneur. J'avais complètement oublié qu'ils existaient LOL

    Merci de votre aide.

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    C'est censé être une liste d'adjacence pour représenter un graphe ton truc ?
    vector< list<size_t> > suffit...
    Boost ftw

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

Discussions similaires

  1. Probléme avec les conteneur
    Par Perudupinkop dans le forum Langage
    Réponses: 6
    Dernier message: 30/11/2009, 10h22
  2. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  3. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  4. []Problème avec les formulaires Outlook
    Par davidinfo dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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