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

C++ Discussion :

le vector n'est pas copié


Sujet :

C++

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 313
    Points : 404
    Points
    404
    Billets dans le blog
    14
    Par défaut le vector n'est pas copié
    Bonjour,


    pourquoi restecorps_s n'est pas copié dans corps_s à la ligne 15?
    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
    std::vector<std::string> parse::corps(){
      std::vector<std::string>restecorps_h,corps_s,restecorps_s,restecorps1_h;
      std::string mot_s;
      if(a.valeur==mot){
        mot_s=a.lexeme;
        consommer(mot);
        restecorps_h.push_back(mot_s);
        while(a.valeur==mot){
          mot_s=a.lexeme;
          consommer(mot);
          restecorps_h.push_back(mot_s);
          restecorps1_h=restecorps_h;
          restecorps_s=restecorps1_h;
        }
        corps_s=restecorps_s;
        return corps_s;
      }
      else
        exit(4);
    }
    quelqu'un a une idée?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    La vraie question c'est plutôt pourquoi tu crois qu'il est pas copié ?
    Parce que pour remettre en question la STL, sauf à être sur certaines plateformes folkloriques, faut ôser...

    Et puis de toute façons ici corps_s est inutile, donc le compilateur assez intelligent pour s'en rendre compte va plus que certainement le supprimer, de même que les autres vector inutiles.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 313
    Points : 404
    Points
    404
    Billets dans le blog
    14
    Par défaut
    C'est le debogueur gdb qui le dit.
    en ajoutant des instructions pour la sortie, on le voit aussi.
    corps_s est inutile?
    ces vector peuvent êtres supprimés mais en fait, ils correspondent à des attributs de non terminaux;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    corps -> mot { restecorps.h ||= mot.s } restecorps {corps.s = restecorps.s }
    restecorps -> mot {restecorps1.h = restecorps.h || mot.s } restecorps1 {restecorps.s = restecorps1.s}
               -> epsilon {restecorps.s = restecorps.h }
    en précisant que || est l'opération de concatenation

    voici toutes les productions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    grammaire	→ production { restegrammaire.h ||= production.s } restegrammaire { grammaire.s = restegrammaire.s } diese
    restegrammaire	→ production { restegrammaire1.h = restegrammaire.h || production.s } restegrammaire1 { restegrammaire.s = restegrammaire1.s }
    		→ epsilon { restegrammaire.s =  restegrammaire.h }
    production	→ mot { resteproduction.h ||= mot.unilex } resteproduction { production.s = resteproduction.s } antislash
    resteproduction	→ mot { resteproduction1.h = resteproduction.h || mot.unilex } resteproduction1 { resteproduction_s = resteproduction1_s }
    		→ epsilon { resteproduction.s = resteproduction.h }
    désolé, je vous a montré un programme qui corresponds à une version ancienne de ces productions
    si on utilise ces dernières productions, le programme est le suivant:
    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
    void parse::grammaire(){
      std::vector<std::vector<std::string>> restegrammaire_h,restegrammaire1_h,
        restegrammaire_s;
      std::vector<std::string> production_s;
      if(a.valeur==mot){
        production_s=production();
        restegrammaire_h.push_back(production_s);
        while(a.valeur==mot){
          production_s=production();
          restegrammaire_h.push_back(production_s);
        }
        restegrammaire_s=restegrammaire_h;
        grammaire_s=restegrammaire_s;
        consommer(diese);
      }
      else
        std::cerr<<"erreur grammaire"<<std::endl;
    }
     
    std::vector<std::string> parse::production(){
      std::vector<std::string> production_s,corps_s,resteproduction_h,
        resteproduction_s;
      std::string mot_s;
      if(a.valeur==mot){
        mot_s=a.lexeme;
        consommer(mot);
        resteproduction_h.push_back(mot_s);
        while(a.valeur==mot){
          mot_s=a.lexeme;
          consommer(mot);
          resteproduction_h.push_back(mot_s);
        }
        resteproduction_s=resteproduction_h;
        consommer(antislash);
        return resteproduction_s;
      }
      else
        exit(2);
    }
    et ce programme fonctionne.

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 14/07/2012, 14h24
  2. vector<byte> n'est pas d'accord.
    Par DakM dans le forum Débuter
    Réponses: 32
    Dernier message: 24/11/2011, 11h17
  3. Réponses: 4
    Dernier message: 16/06/2011, 23h36
  4. Réponses: 10
    Dernier message: 30/06/2008, 19h59

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