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

Langage C++ Discussion :

comment retourner 2 valeurs avec une fonction


Sujet :

Langage C++

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 29
    Par défaut comment retourner 2 valeurs avec une fonction
    Bonjour,

    J'ai écrit une fonction qui à la fin me trouve 2 valeurs. Valeur 1 et Valeur 2. J'aimerais savoir comment faire pour retourner les 2 valeurs en meme temps. Je sais juste comment faire pour retourner une.

    Fonction{
    .
    .
    .
    .
    return valeur 1; (je veux les 2 valeurs)
    }

    j'ai pensé à mettre les 2 valeurs dans un tableau.
    double Tableau [2]
    Tableau[0]= valeur 1, Tableau[1]= valeur 2;
    Puis retourner le tableau. Je ne sais pas si c est une bonne idée ou pas.
    Je vous remercie d'avance pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 470
    Par défaut
    Il y a plein de méthodes, mais moi, j'aime bien la méthode bourrin, , faire une classe MaFonctionResultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MaFonctionResultat MaFonction{
    ...
    MaFonctionResultat res(valeur1,valeur2);
    return res;
    }

  3. #3
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    1 fonction retourne 1 truc (ou rien : void)
    Mais tu es libre de retourner le truc de ton choix : une classe, structure, union, un vector, tuple, ... et remplir ce truc de ce que tu veux.
    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.

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 760
    Par défaut
    Avec des paramètres en sortie (<- si leur nombre est limité)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void ma_function(XXX& val1, XXX& val2) {
     
    //  ....
     
        val1 = YYY;
        val2 = ZZZ;
    }

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 29
    Par défaut
    Merci pour vos réponses. Je vais essayer.

  6. #6
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Comme dit bacelar et Bousk, regarde du côté de std::pair (std::make_pair) et std::tuple (std::make_tuple) ou fais ta propre structure (ou classe) pour avoir des noms qui ont plus de sens que first et last ou std::get<N>(object).
    Si les deux objets ont le même type, tu peux utiliser std::array<T, 2> (C++11).
    La version proposée par foetus peut être une solution mais il faut que les types soient default constructible (pour faire du code propre) alors que la première solution demande uniquement que les types soient copiables ou déplaçables (C++11).

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 641
    Par défaut
    Salut,
    Citation Envoyé par foetus Voir le message
    Avec des paramètres en sortie (<- si leur nombre est limité)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void ma_function(XXX& val1, XXX& val2) {
     
    //  ....
     
        val1 = YYY;
        val2 = ZZZ;
    }
    On peut le faire, bien sur. Mais je suis de moins en moins partisan de cette pratique, car tu dit alors adieux à la "pureté" de ta fonction (au fait que la fonction ne modifie absolument en rien les paramètres qu'elles reçoit).

    Dans le cas général, cela ne posera aucun problème, mais, dans un cas particulier de multi-threading... ouppsss...!!!
    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

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 294
    Par défaut
    En version C++14:

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    auto f() {
        return std::make_tuple(42, "toto");
    }
    ...
    auto res = f();
    std::cout << "nb: " << std::get<0>(res) << "\n";
    // ou encore
    int i;
    char const* s; // je ne sais plus si ça marcherait directement avec un std::string
    std::tie(i,s) = f();

    Et encore plus fort avec le C++17 (avec les Structured Bindings)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 252
    Par défaut Paramètres & FAQs
    La solution des paramètres est aussi celle à laquelle je pensais. D'ailleurs c'est la réponse à la question Comment créer une fonction qui retourne plus d'une valeur ? de la FAQ C. Au passage ne pas oublier de les lire avant de poster même si je n'ai rien trouvé du côté de la C++.

  10. #10
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 294
    Par défaut
    Le problème du retour par paramètre sortant, c'est le possible aliasing qui pousse le compilo à ne pas optimiser.
    Mieux vaut se faire une structure et la renvoyer par copie. Élision aidant, c'est gratuit. Et quand fabriquer une structure pour si peu nous semble nous compliquer la tâche pour rien, il y a donc paires et tuples.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #11
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Tu remarqueras que c'est ce que fait map.find, par exemple.

  12. #12
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 294
    Par défaut
    Citation Envoyé par ternel Voir le message
    Tu remarqueras que c'est ce que fait map.find, par exemple.
    ??
    Cela renvoie un itérateur qui référence une paire {clé, valeur}.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  13. #13
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    map::insert alors. Une version retourne une pair contenant un itérateur et un booléen.

  14. #14
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Effectivement, j'ai fourché.

  15. #15
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 29
    Par défaut
    Je vous remercie pour les réponses. J'ai pu faire ce que je souhaitais. MERCI !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/04/2015, 13h03
  2. Réponses: 1
    Dernier message: 16/03/2007, 17h30
  3. Réponses: 14
    Dernier message: 09/03/2007, 12h21
  4. Réponses: 3
    Dernier message: 23/01/2007, 09h20
  5. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37

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