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 :

[Tuto] Recherche de tutoriel sur std::list et std::vector


Sujet :

SL & STL C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut [Tuto] Recherche de tutoriel sur std::list et std::vector
    Bonjour,

    Après une recherche je n'ai pas trouvé.
    Je rechercher une tutoriel ou un exemple d'utilisation des std::list et std::vector pour c++.

    Je voudrais avoir une liste d'objet générique, pouvoir connaitre le nombre d'élément de la liste, pouvoir ajouter et supprimer un élément de la liste.

    par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    liste li;
    remplir(li);
    nbelement = compte(li);
    pour (i=0, i<nbelement , i++)
      si (condition = vrai) alors
        supprime(i, li)
        nbelement --;
        i--;
      fin si
    fin pour


    Merci.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 142
    Points : 185
    Points
    185
    Par défaut
    Tu trouveras les infos dont tu as besoin et des exemples ici.

    Bonne lecture
    "Le problème du monde, c'est que les imbéciles sont présomptueux et les gens intelligents bourrés de doutes" B. Russell

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pour ce qui est de ton exemple (pour vérifier que tu as bon après lu un tutoriel), ça donnerait ceci :
    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
    std::list<int> li;
     
    li.push_back(5);
    li.push_back(24);
    ...
     
    std::size_t nbelements = li.size();
     
    for (std::list<int>::iterator it = li.begin(); it != li.end(); )
    {
        if (...)
        {
            it = li.erase(it);
            --nbelements;
        }
        else
        {
            ++it;
        }
    }
    Tu peux aussi jeter un oeil à la FAQ, notamment pour la suppression d'éléments.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 266
    Points : 161
    Points
    161
    Par défaut
    Ou tu peux aller faire un tour sur MSDN qui est la doc' officielle et qui présente quelques exemples bien implémentés.
    Voici les liens vers MSDN (page des méthodes de chaque classe) :
    vector : http://msdn2.microsoft.com/en-us/lib...07(VS.71).aspx
    list : http://msdn2.microsoft.com/en-us/lib...8a(VS.71).aspx

  5. #5
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par frizou11
    Ou tu peux aller faire un tour sur MSDN qui est la doc' officielle
    Ce n'est pas parfaitement exact. La MSDN est la doc officielle concernant l'implémentation de la STL livrée avec le compilateur de visual8 unisquement. Mais il y a (au moins) autant d'implémentation de la STL que de compilateur
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 266
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par r0d
    Ce n'est pas parfaitement exact. La MSDN est la doc officielle concernant l'implémentation de la STL livrée avec le compilateur de visual8 unisquement. Mais il y a (au moins) autant d'implémentation de la STL que de compilateur
    Oups, autant pour moi
    Merci pour ta réponse !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Merci à tous pour vos réponses.

    J'ai une autre question.

    Je voudrais faire une liste d'objet
    Quelle méthode il est préférable d'utiliser, avec ou sans pointeur ?
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Objet
    { ...
    };
     
    list<Objet> maListe ou 
    list<Objet*> maListe
    Dans le cas d'un pointeur, il faudra que je supprime l'objet avant de réaliser
    maListe.erase(iterateur); ?

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    N'utilise des pointeurs que lorsque tu ne peux pas faire autrement. En l'occurence, si les objets stockés ne sont pas copiables, ou si leur durée de vie doit excéder celle du conteneur.

    Et il faudra bien entendu libérer toute mémoire allouée avec new ; ton std::list ne peut pas savoir s'il doit le faire automatiquement ou non.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Laurent Gomila
    N'utilise des pointeurs que lorsque tu ne peux pas faire autrement. En l'occurence, si les objets stockés ne sont pas copiables, ou si leur durée de vie doit excéder celle du conteneur.

    Et il faudra bien entendu libérer toute mémoire allouée avec new ; ton std::list ne peut pas savoir s'il doit le faire automatiquement ou non.
    Il n'y a pas de problème d'occupation mémoire si on ne passe pas par des pointeurs ?

  10. #10
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Que tu passes par des pointeurs ou que tu mettes directement tes objets dans le vecteur, tes objets seront alloués à un moment ou à un autre. Donc non, il n'y a pas de problème de ce côté là.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    (je reouvre le topic)

    Qu'entendez-vous par "la duree du container"?

    Parce que je cherche un lien avec mon probleme : j'ai creer une liste de vecteur

    list<vector<int > > ...

    et si remplir le vector n'est pas un probleme (ainsi que le conserver), je ne peux pas remplir la liste car tous les vectors que je lui donne sont indique { } par mon deboggeur (vide quoi donc NULL)
    Est-il donc bien possible de creer des list<vector<.... ?
    Merci d'avance.

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Est-il donc bien possible de creer des list<vector<.... ?
    Bien sûr. Montre nous plutôt ton code qu'on puisse t'aider

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    En voila un bon... le constructeur de ma classe :
    (c'est des double pqs des int... pareil)
    Classe deja construite et (normalement) tout a fait au point
    TRUC possede en protected une list<vector<double> > nomme L_C et un int size.
    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
     
    TRUC::TRUC(C_P<double>& c)
      {
       vector<C_P<double> > Vect0;
       vector<C_P<double> > Vect(1,c); //normalement c'est un tableau d'1 case avec c dedans.
     
       //pour voir avec le debogeur
       vector<C_P<double> >::iterator iteV=Vect.begin();
       C_P<double> cp;
       for(;iteV!=Vect.end();++iteV)
         {cp=*(iteV);}
       cp=*(iteV);             //fin du pour voir
     
       L_C.push_back(Vect);
       vector<C_P<double> > vb=*(L_C.begin());
      C_P<double> cp_=*(vb.begin());
       size=1;
      }
    ...en fait en relisant, y a un truc bizarre... pourquoi je fais L_C.push_back(Vect) et pas de (*Vect) si c'est un tableau...?
    Ca doit venir de la...

  14. #14
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par DEVfan
    Qu'entendez-vous par "la duree du container"?
    En fait, c'est plutôt la durée de vie du container. La durée de vie (ou scope) s'applique à toute variable, qu'il s'agisse d'un type (natif ou non) ou d'une instance d'une classe (ou d'un struct, ce qui revient exactement au même). La durée de vie d'une variable correspond à l'ensemble du code présent entre la déclaration de cette variable et la fin du bloc dans lequel elle est déclarée.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void unefonction(int a)
    {
        if (a==0)
        {
            int b = 10; //déclaration de b
            std::cout << b << std::endl;
        } // fin du bloc dans lequel est déclaré b => on sort du scope de b
    }
    Ce qu'il faut comprendre, c'est que quand on sort du bloc dans lequel est défini une variable, cette variable est automatiquement détruite (son destructeur est appelé).

    Hope it helps.

    ps: sinon je ne comprend pas ce que tu essaies de faire dans le code que tu viens de poster, mais:
    pourquoi je fais L_C.push_back(Vect) et pas de (*Vect) si c'est un tableau...?
    Non c'est normal. En fait, il ne faut pas considérer le std::vector comme un tableau de type C, qui en fait est un pointeur vers le premier élément du tableau. Un std::vector est un objet.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    OK du coup il est bien detruit...
    Je pensais que en ecrivant vector (1,truc) cela correspondait a creer un pointeur de vector d'une case et qu'il la remplissait de truc... mais j'ai du mal lire. Ca doit plutot creer un objet vector de taille 1 avec du coup 1 truc.

    ... pour mon code, je dois faire un *vector (1, truc) et renvoyer tout en *Vect dans la liste.
    et pas besoin de faire le menage pour la destruction de la list puisqu'il s'agit toujours d'un simple objet (vector)

    En fait, ce que je fais est un peu con, il s'agit simplement d'une liste avec des trucs. Seulement dans la mojorite des cas, cette liste est remplie avec soit un gros tas de truc soit en en ajoutant juste 1. Du coup, je voulais "gagner du temps" en faisant un combine...si je rentre 50 fois la meme info (ou presque), je la range dans un gros vecteur et sinon dans un vecteur unitaire. (suis-je clair? est-ce vraiment utile?)

  16. #16
    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
    Il manque la définition de L_C.
    Boost ftw

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    TRUC possede en protected
    une list<vector<double> > nomme L_C
    et
    un int size.

  18. #18
    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
    vector<double> et vector<C_P<double> > sont des types incompatibles.
    Boost ftw

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    Exact et faux a la fois.
    Avant de commencer, j'avais oublie 2 compression de nom (pour pqs qlourdir)... mais maintenant c'est bon.

    Pour ce qui est des vector, je vois pas pourquoi ce serait pas possible. Et si vraiment c'etait le cas,explique moi comment je fais pour avoir tout de meme des trucs dedans que je maitrise.
    Le seul truc qui cloche c'est que qq mon deboggeur en pas a pas me montre ceci { } a propos des vecteurs mais les contenus sont bien sauves. J'ai essaye le pointeur de Vecteur aussi comme suggere (par moi) dans un autre post... et ca fait pareil!

    La, je sollicite une veritable aide!!

  20. #20
    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
    Si tu veux vraiment de l'aide, fais un exemple minimal réduit, qui compile et qui démontre le problème.
    Boost ftw

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/11/2010, 13h00
  2. Recherche cours/tutoriels sur csharp.net
    Par angellica.ginf dans le forum Débuter
    Réponses: 2
    Dernier message: 09/07/2010, 16h13
  3. Recherche d'algorithme sur les listes
    Par shaku dans le forum Scheme
    Réponses: 3
    Dernier message: 22/01/2009, 03h16
  4. Cherche tutoriels sur les listes
    Par the jocker dans le forum C
    Réponses: 1
    Dernier message: 11/11/2007, 12h51
  5. Recherche de tutoriels sur ncurse
    Par Pipoland dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 02/12/2004, 08h36

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