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 :

mise a jour d'une std::list a partir d'une variable locale


Sujet :

SL & STL C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut mise a jour d'une std::list a partir d'une variable locale
    Bonjour, j'aimerais savoir si le code suivant vous semble correct:

    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
    void fonctionBidon(void) {
        .
        .
        std::list<std::string> listeClients;
        updateList(listeClients);
        // à cet endroit, listClients contient elle des données valide?
        .
        .
    }
     
    void updateList( std::list<std::string> &listeClients)
    {
        unClient client_t; //client_t est une struct contenant entre autres l'âge et le nom du client...
        for (int x=0; x< nbClients; x++) {
            unClient = loadClient(x); //récupère les infos d'un client
            if (unClient.age > 65) {
                 string nomClient(unClient.nom); // unClient.nom est de type char *
                 listeClients.push_back(nomClient);
            }
        }
    }
    Je me demande plus particulièrement ce qui ce passe lorsque le programme quitte la fonction 'updateListe'. La variable 'nomClient' sort de sa zone de visibilité et est donc détruite. Alors je me demande si 'listeClient' est bien valide après l'appel de la fonction 'updateList'.
    merci de votre aide.

  2. #2
    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
    push_back copie l'objet que tu lui donnes pour l'insérer dans le conteneur.

    Oui, c'est valide.
    Boost ftw

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    C'est valide car string sait se recopier sans perdre les données (heureusement!). Ta liste contiendra des données correctes.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Ouais les conteneurs de la STL ne stockent pas de références, ils font une copie de données avant stockage.
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    merci pour les réponses.

    En fait je croyait qu'il n'y avait pas copie du string puisque si on regarde le prototype de fonction de push_back(), le paramètre qui est reçu est de type référence constante (push_back(const _ty & _val)).

    Si il y a copie du paramètre, pourquoi celui-ci n'est il pas plutôt passé par valeur?

    merci de m'aider, je suis loin d'être un spécialiste en STL...

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Bé ça le passe par référence et ensuite le vector fait la copie de sa valeur.

    Fait un push_back en debug et regarde ce qu'il fait


    Il y a des petits livres sur la STL, à 5-6€
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/03/2014, 09h56
  2. liste déroulante à partir d'une autre liste
    Par maffi dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 29/10/2011, 14h12
  3. Réponses: 6
    Dernier message: 11/02/2009, 17h17
  4. [MySQL] Remplir une liste déroulante à partir d'une autre liste dynamique
    Par Sekigawa dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 31/12/2008, 08h54
  5. remplissage d'une liste déroulante à partir d'une autre liste
    Par monphp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/05/2007, 12h28

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