Partage
  • Partager sur Facebook
  • Partager sur Twitter

Remove liste d'objets

Sujet résolu
    17 juillet 2007 à 15:25:43

    Bonjour, je dispose d'une liste d'objets et je voudrais en supprimer de façon aléatoire (tirage d'un chiffre en 0 et 1, si > 0,5 on conserve l'objet sinon on supprime l'objet).
    J'ai pensé à utiliser remove() mais du coup je vois pas quel paramètre passer. En effet list.remove(bidule) enlève tous les éléments de list qui ont pour valeur bidule. Or dans mon cas mes objets n'ont pas de valeur...
    Sinon j'ai aussi tenté avec erase() mais bon ça ne fonctionne pas :(

    Je vois pas trop comment faire... :euh:
    • Partager sur Facebook
    • Partager sur Twitter
      17 juillet 2007 à 15:32:40

      supprimer un objet??? je ne comprend pas l'interet... mais j'essayerais delete juste pour voir...
      • Partager sur Facebook
      • Partager sur Twitter
        17 juillet 2007 à 15:42:06

        Si ta liste contient des pointeurs sur tes objets, il te suffit de faire des delete.

        Sinon, il te faut mettre "NULL" dans la case correspondante.
        • Partager sur Facebook
        • Partager sur Twitter
        Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
          17 juillet 2007 à 15:55:14

          Ma liste ne contient pas des pointeurs mais bel et bien les objets
          Delete ne marche pas : le premier objet à supprimer est bien supprimé mais pas les suivants... o_O
          Mais peut être que je m'y prend mal
          Voilà la fonction qui gère cette suppression

          void Population::mortaliteO(float tauxSurO){
           Individu * iO;
           list<Individu>::iterator iiO = listIndividuO.begin();
           for (iiO; iiO != listIndividuO.end(); iiO++){
               iO = &*iiO;
               float alea1;
               int min = 0;
               int max = 1;
               alea1 = hasard(min, max);
               if (alea1 > tauxSurO ){
                 delete iO;
                 }       
               }
          }


          Merci de votre aide en tout cas
          • Partager sur Facebook
          • Partager sur Twitter
            17 juillet 2007 à 16:12:00

            Delete ne peut pas fonctionner si tu n'as pas un pointeur.

            iO = &*iiO;


            C'est quoi le but de cette ligne ?

            Parce ce que si je traduis en français, on obtient quelque chose du type:

            Mets l'adresse de la chose pointée par iiO dans iO.


            iO = iiO aurait le même effet.

            Pour faire ce que tu veux faire, utilises "erase":
            iterator erase ( iterator position );

            Comme tu peux le voir cette fonction renvoie un itérateur sur l'élément placé juste après l'élément détruit. Il te faut donc faire ceci:



            void Population::mortaliteO(float tauxSurO)
            {
             for ( list<Individu>::iterator iiO = listIndividuO.begin(); iiO != listIndividuO.end(); iiO++)
                 if (hasard(0, 1) > tauxSurO ){
                   iiO=NOM_DE_LA_LISTE.erase(iiO);
                   --iiO;
                   }       
            }
             
            • Partager sur Facebook
            • Partager sur Twitter
            Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
              17 juillet 2007 à 16:39:52

              ^^ c'est plus judicieux ici d'utiliser les iterators.
              • Partager sur Facebook
              • Partager sur Twitter
                18 juillet 2007 à 9:52:10

                Merci beaucoup a vous!! Je crois que je me suis emmèlé les pinceaux avec les itérateurs, et surtout le problème que j'avais est que je ne décrémentais pas mon itérateur quand le maillon était supprimé!!
                Voilà maintenant ça fonctionne parfaitement...jusqu'à un autre problème... :p
                Merci encore :D
                • Partager sur Facebook
                • Partager sur Twitter

                Remove liste d'objets

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown