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 :

return de vector


Sujet :

SL & STL C++

  1. #1
    Membre éclairé Avatar de LesLemmings
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 302
    Par défaut return de vector
    bonjour dans une methode de ma classe j'ai un vector
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<CString>tabCode ;
    et je voudrais le retourner
    comment je dois declarer ma classe ?
    dans le cpp
    ???? Ccode::methode1();
    et dans le .h
    ???? methode1();

  2. #2
    Membre émérite

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    De la même façon que si tu devais retourner un int, par exemple, à part que tu retournes un std::vector<CString>.

  3. #3
    Membre éclairé Avatar de LesLemmings
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 302
    Par défaut
    Merci Bisous Xxx

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Si le vecteur que tu renvoie est réellement celui que contient ta classe, tu as vraissemblablement intérêt à le renvoyer sous forme de référence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<type>& maclasse::methode()//ici, tu peux renvoyer la référence
    {
        return monvecteur;
    }
    éventuellement en const (const std::vector<type>& maclasse::methode()const)

    Si le vecteur que tu veut renvoyer est rempli par la fonction, mais ne fait pas réellement partie de la classe, tu ne pourras par contre pas le renvoyer sous forme de référence, parce que sinon, tu renverra une référence sur une variable qui sera détruite en sortie de fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    std::vector<type> maclasse::methode()//ici, tu ne peux pas renvoyer la référence
    {
       std::vector<type> ret;
       ret.push_back(membre1);
       ret.push_back(membre2);
       ret.push_back(membre3);
       ret.push_back(membre4);
       return ret;
    }
    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

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par nikko34
    Dans ce cas là, tu fais une copie du vector. Est-ce que c'est ce que tu veux?
    Un bon compilateur ne fait pas de copie.
    Une discussion sur le retour des variable locales a eu lieu il y a qqs mois.
    Si je me souviens bien, Visual 6/7/8 ainsi que GCC sont mauvais... alors que le compilateur Intel (ICL/ICC) est bon...

    Le standard C++ voudrait que les variables temporaires soient retournées sans copie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    vector<int> f()
    {
      return vector<int>(10); // variable temporaire
    }
    Le standard ne dit rien sur le retour de variables locales. A ma connaissance GCC et Visual font bêtement la copie , alors que ICC/ICL sait retourner de grosses variables locales sans copie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    vector<int> f()
    {
      vector<int> X(10); // variable locale
      ...
      return X;
    }

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    ouais ok j'ai compris, j'ai cru qu'il avait son vector comme attribut.

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

Discussions similaires

  1. faire plusieurs return avec des vectors
    Par mazertys17 dans le forum C++
    Réponses: 10
    Dernier message: 13/11/2014, 16h57
  2. [C#] Changer le focus avec la touche return
    Par sblanc74 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/10/2003, 18h38
  3. return
    Par drKzs dans le forum C
    Réponses: 3
    Dernier message: 18/09/2003, 22h36
  4. "vector" provoque "syntax error", malgré
    Par seenkay dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 24/08/2003, 03h21
  5. Réponses: 2
    Dernier message: 11/07/2003, 18h24

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