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 :

List de la STL


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Par défaut List de la STL
    Bonjour à tous!

    Est-ce qu'avec les list de la STL on peut affecter une list à une autre sans faire une boucle pour recopier les éléments un à un.

    Autrement dit, est-ce que le code suivant fonctionne?

    list<Objet> l1;
    list<Objet> l2;

    //on suppose que l1 contient des Objet

    l2=l1;

    Merci

  2. #2
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par carnifex Voir le message
    Bonjour à tous!

    Est-ce qu'avec les list de la STL on peut affecter une list à une autre sans faire une boucle pour recopier les éléments un à un.

    Autrement dit, est-ce que le code suivant fonctionne?

    list<Objet> l1;
    list<Objet> l2;

    //on suppose que l1 contient des Objet

    l2=l1;

    Merci
    Oui.

  3. #3
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Dans le cas d'objet il faut avoir surcharger l'opérateur =

  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,
    Citation Envoyé par Goten Voir le message
    Dans le cas d'objet il faut avoir surcharger l'opérateur =
    Non, parce que c'est l'opérateur = qui est défini pour... la liste elle même.

    En effet, il faut savoir que la std::list dispose des fameux "big four" (constructeur, constructeur par copie, opérateur d'assignation et destructeur).

    Cela signifie, entre autre, que, plutôt que de l'assigner, tu peux aussi très bien envisager, tout simplement une copie, sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void foo()
    {
        std::list<Type> l1;
        /* tout ce qu'il faut pour remplir l1 */
        std::list<Type>l2(l1);
    }
    La seule chose à laquelle il faille faire attention, c'est le cas où la liste contient... des pointeurs sur des objet:

    Les pointeurs sont copiés dans ce cas, mais pas les objet pointés, et tu te trouve donc avec deux listes dont les éléments pointent vers la même adresse, et donc, avec le risque d'une tentative de "double libération de la mémoire"
    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
    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
    et en plus, si ça ne suffit pas, pour copier des containers dans d'autres il y a un tas d'<algorithm> définis.. et d'autres encore dans boost si je me souviens bien.

  6. #6
    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
    Citation Envoyé par nikko34 Voir le message
    et en plus, si ça ne suffit pas, pour copier des containers dans d'autres il y a un tas d'<algorithm> définis.. et d'autres encore dans boost si je me souviens bien.
    Si, bien sur... Tu as, effectivement std::copy qui pourrait s'utiliser sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main()
    {
        std::list<Type> origine;
        /* remplire la liste nommee origine */
        std::list<Type> destination;
        std::copy(origine.begin(); origine.end();destination.begin());
        return 0;
    }
    mais cet algorithme (dans le cas qui nous occupe) ne fera finalement qu'exactement ce que fait le constructeur par copie

    Si tu le voulais, tu pourrais même jouer avec quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main()
    {
        std::list<Type> origine;
        /* remplire la liste nommee origine */
        std::list<Type> destination;
        destination.insert(destination.begin(),origine.begin(), origine.end());
        return 0;
    }
    et je suis sur de ne pas avoir fait le tour des possibilités
    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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/03/2010, 08h31
  2. Les listes avec la STL
    Par Le savant fou ! dans le forum SL & STL
    Réponses: 7
    Dernier message: 02/04/2008, 21h54
  3. Listes de la STL
    Par mister3957 dans le forum C++
    Réponses: 6
    Dernier message: 25/09/2007, 13h45
  4. Heriter le type list de la STL
    Par mathher dans le forum SL & STL
    Réponses: 13
    Dernier message: 28/03/2006, 23h48
  5. list de la STL
    Par Bethoring dans le forum SL & STL
    Réponses: 2
    Dernier message: 03/11/2005, 20h14

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