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 :

STL : list


Sujet :

SL & STL C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 116
    Points : 40
    Points
    40
    Par défaut STL : list
    Bonjour je teste l'utilisation des liste de la STL et je bloque

    quelqu'un pourrait-il me dire ce qu'il ne va pas ?


    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
     
    #include <list>
     
    using namespace std;
     
    typedef list <char *, char *> UpList;
    typedef list <int, UpList> MasterList;
     
    int main(int argc, char* argv[])
    {
    	UpList  UpListA;
    	MasterList  MasterListA;
     
     
    	UpListA->push_back("a", "b");
    	UpListA.push_back("a", "b");
    	UpListA.push_back("a", "b");
    	MasterListA.push_back(1, MasterList);
    	UpListA.push_back("c", "d");
    	UpListA.push_back("c", "d");
    	UpListA.push_back("c", "d");
    	MasterListA.push_back(2, MasterList);
     
    	return 0;
    }
    merci

  2. #2
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    quelqu'un pourrait-il me dire ce qu'il ne va pas ?
    un cours de C++ ?

    tu n'instancies à aucun moment tes listes
    il y a du linge sur la corde à linge

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 116
    Points : 40
    Points
    40
    Par défaut
    non c pas ca car ce code fonctionne :

    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
    typedef list<int> li;
     
    int main(void)
    {
        li l1;
        l1.push_back(2);
        l1.push_back(5);
        cout << "Tête : " << l1.front() << endl;
        cout << "Queue : " << l1.back() << endl;
        l1.push_front(7);
        cout << "Tête : " << l1.front() << endl;
        cout << "Queue : " << l1.back() << endl;
        l1.pop_back();
        cout << "Tête : " << l1.front() << endl;
        cout << "Queue : " << l1.back() << endl;
        return 0;
    }
    je pense que c au niveau de la définition des list :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef list <char *, char *> UpList;
    typedef list <int, UpList> MasterList;

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 116
    Points : 40
    Points
    40
    Par défaut
    A-t-on le droit de mettre plusieur valeur entre les <valeur1, valeur2, ...>?

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 161
    Points
    161
    Par défaut Re: STL : list
    Citation Envoyé par hitchie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UpListA->push_back("a", "b");
    Pourquoi l'opérateur "->" et non l'opérateur "." ?


    Ensuite, je ne me souviens pas qu'un std::list prenne deux arguments template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef list <char *, char *> UpList;
    Pour ce que tu cherches à faire, regarde du coté de std::pair

  6. #6
    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
    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
    #include <utility>
    #include <list>
     
    using namespace std;
     
    typedef list<pair<const char*, const char*> > UpList;
    typedef list<pair<int, UpList> > MasterList;
     
    int main()
    {
       UpList UpListA;
       MasterList MasterListA;
     
       UpListA.push_back(make_pair("a", "b"));
       UpListA.push_back(make_pair("a", "b"));
       UpListA.push_back(make_pair("a", "b"));
       MasterListA.push_back(make_pair(1, UpListA));
       UpListA.push_back(make_pair("c", "d"));
       UpListA.push_back(make_pair("c", "d"));
       UpListA.push_back(make_pair("c", "d"));
       MasterListA.push_back(make_pair(2, UpListA));
    }
    Il serait sûrement plus pertinent d'utiliser autre chose que des listes de paires.
    Boost ftw

  7. #7
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par hitchie
    non c pas ca car ce code fonctionne :
    La Drogue C'est mal t'a dit que les listes n'étaient pas initialisées.
    Pas possible d'être tétu !

    Loufoque a donné le bon code

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut Re: STL : list
    Citation Envoyé par Volune
    Ensuite, je ne me souviens pas qu'un std::list prenne deux arguments template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef list <char *, char *> UpList;
    C'est pourtant le cas. Une liste possède deux arguments templates. Mais là où tu as raison, c'est que le deuxième argument ne représente pas un élément de la liste, mais juste un allocateur (en gros, si on a envie que la liste utilise autre chose que new pour allouer de la mémoire, par exemple en mémoire partagée, on lui passe une classe dont les fonctions allouent à la demande, et elle se débrouille).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 116
    Points : 40
    Points
    40
    Par défaut
    Bonjour, j'aurais une autre question sur l'utilisation des list :

    je dispose de cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct UpStruct
    {
    		char *			u_lrcTn;				
    		char *			u_latitude;
    		char *			u_longitude;
    		char *			u_course;
    		char *			u_speed;
    } UpStruct ;
     
    typedef list <UpStruct> UpList;
    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
     
    int main(int argc, char* argv[])
    {
    	UpList UpListA;
    	MasterList MasterListA;
    	UpStruct My_UpStruct;
    	MasterStruct My_MasterStruct;
    	UpList::iterator i;
    	MasterList::iterator j;
     
     
    //	
    	My_UpStruct.u_lrcTn = "0001";
    	My_UpStruct.u_course = "123";
    	My_UpStruct.u_speed = "100";
    	My_UpStruct.u_latitude = "43:10:45 N";
    	My_UpStruct.u_longitude = "01:14:21 E";
    	UpListA.push_back(My_UpStruct);
     
    	My_UpStruct.u_lrcTn = "0002";
    	My_UpStruct.u_course = "223";
    	My_UpStruct.u_speed = "200";
    	My_UpStruct.u_latitude = "22:10:45 N";
    	My_UpStruct.u_longitude = "22:14:21 E";
    	UpListA.push_back(My_UpStruct);
     
    	for (i = UpListA.begin(); i != UpListA.end(); ++i){
    		cout << i->u_lrcTn << " ";
    		cout << endl;
    	}
     
     
        cout << endl;
     
    	My_MasterStruct.p_lrcTn = "001";
    	My_MasterStruct.MyList = UpListA;
    	MasterListA.push_back(UpListA);
     
    	for (j = MasterListA.begin(); j != MasterListA.end(); ++j){ ..................  }
    je voudrais dans le "for" afficher le contenu de la liste "MasterListA" mais comment accéder au contenu de "MyList"?

    }

  10. #10
    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
    En déréferençant j. (opérateur *)
    Tu l'as déjà fait dans ta boucle précédente avec l'opérateur -> (a->b est équivalent à (*a).b)
    Boost ftw

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 116
    Points : 40
    Points
    40
    Par défaut
    oui mais là la différence est que c une list de list. alors la question est :
    Comment accéder au élément d'une list de list?

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ben tu prends l'itérateur sur la liste fille en faisant un for(typename UpList::iterator listeFille = j->begin, listeFille != j->end(); ++listeFille){......}
    Normalement, quoi.

  13. #13
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par hitchie
    Bonjour, j'aurais une autre question sur l'utilisation des list :

    je dispose de cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct UpStruct
    {
    		char *			u_lrcTn;				
    		char *			u_latitude;
    		char *			u_longitude;
    		char *			u_course;
    		char *			u_speed;
    } UpStruct ;
     
    typedef list <UpStruct> UpList;
    Attention : Les objets que l'on met dans un conteneur STL doivent réponse à quelques propriétés, et en particulier être copiables, avec une sémantique de copie bien faite. Selon l'utilisation qui est fait de ces char*, il est fort possible que cette propriété ne soit pas vérifiée dans ce cas.

    On se simplifie généralement la vie en utilisant plutôt des strings.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  14. #14
    Membre actif Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Points : 219
    Points
    219
    Par défaut
    Plutôt qu'une liste de pair, j'utiliserais à ta place un map, qui permet d'associer une clé à une valeur, en permettant les doublons.

    Va voir sur le site officiel de la STL: http://www.sgi.com/tech/stl/Map.html

    La STL ce n'est pas que les list...
    .:: WOTC_MasterMind | Never Surrender | Warriors of The Cross ::.
    Il n'y a qu'une façon d'échouer, c'est d'abandonner avant d'avoir réussi.

  15. #15
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Citation Envoyé par Mast3rMind
    Plutôt qu'une liste de pair, j'utiliserais à ta place un map, qui permet d'associer une clé à une valeur, en permettant les doublons.
    Correction, les std::map ne permettent pas les doublons, les std::multimap oui parcontre.

  16. #16
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    Citation Envoyé par vdumont
    Citation Envoyé par Mast3rMind
    Plutôt qu'une liste de pair, j'utiliserais à ta place un map, qui permet d'associer une clé à une valeur, en permettant les doublons.
    Correction, les std::map ne permettent pas les doublons, les std::multimap oui parcontre.
    tout dépend de quoi il parle. Doublon de clé ou doublon de valeur
    il y a du linge sur la corde à linge

  17. #17
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Doublons de clés équivalentes pour la relation d'ordre stricte faible. Compliqué, non ?
    L'opération effectuée est !(élément < autre) && !(autre < element), c'est la relation d'équivalence - dans le cas d'une relation d'ordre total, c'est l'égalité -.

  18. #18
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Ouais je prenais pour acquis qu'il parlait de la clé.

Discussions similaires

  1. STL - List d'objet - Ajout des mêmes objets
    Par asgardia dans le forum SL & STL
    Réponses: 2
    Dernier message: 23/05/2007, 03h19
  2. C++, STL, List et Iterator
    Par asgardia dans le forum SL & STL
    Réponses: 6
    Dernier message: 20/05/2007, 17h22
  3. STL list : acceder aux enfant d'une class depuis un liste
    Par poussinphp dans le forum SL & STL
    Réponses: 6
    Dernier message: 29/04/2007, 17h21
  4. pb dans la stl::list avec size
    Par DEVfan dans le forum SL & STL
    Réponses: 6
    Dernier message: 10/01/2007, 18h35
  5. STL List et variable globale (extern)
    Par flipper203 dans le forum SL & STL
    Réponses: 9
    Dernier message: 04/07/2006, 14h20

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