Effacer élement liste stl

Résolu
poiuytrez3 Messages postés 150 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 17 mars 2009 - 30 sept. 2007 à 09:46
poiuytrez3 Messages postés 150 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 17 mars 2009 - 1 oct. 2007 à 00:22
Bonjour,

J'utilise depuis très peu de temps la stl.
J'ai un problème lors de la suppression d'un élément d'une liste.
Voici mon problème : J'ai une liste d'objet CourseSection dans lequel je dois supprimer quelques éléments.
Juste après la suppression d'un élement, le programme plante. Il semble que l'iterateur à été altéré.
Je ne vois pas comment je peux contourner le problème ou alors si quelqu'un connais une solution clean pour rechercher et enlever plusieurs éléments d'une liste.

Merci de votre aide.

Voici mon code :

// Remove a courseSection from the student
void Student1::removeCourseSection(string codeCourse)
{
    // Define the iterator of the list
    list<CourseSection>::iterator iterator;

    // For each element of the list
    for(iterator = listCourseSection.begin(); iterator != listCourseSection.end(); iterator++)
    {
        // Check if it is the code to find
        if(iterator->getCode() == codeCourse)
            // Delete the element
            listCourseSection.erase(iterator);
    }

}

-----------------------------------------------------------------------------------
http://www.mesdevoirs.net -- Corrections de devoirs de mathématiques en ligne

3 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
30 sept. 2007 à 10:49
Fréquent ce problème, suffirait de chercher un peu sur ce forum.
Règle simple: JAMAIS de boucle "for" lorsqu'on supprime des éléménts d'un conteneur.

    list<CourseSection>::iterator it = listCourseSection.begin();
    while ( it != listCourseSection.end())
    {
        if(iterator->getCode() == codeCourse)
            it = listCourseSection.erase(it);
        else
            it++;
    }
3
poiuytrez3 Messages postés 150 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 17 mars 2009
30 sept. 2007 à 19:29
Ah, merci!!
Je vais tester!!

-----------------------------------------------------------------------------------
http://www.mesdevoirs.net -- Corrections de devoirs de mathématiques en ligne
0
poiuytrez3 Messages postés 150 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 17 mars 2009
1 oct. 2007 à 00:22
Merci en effet, ça marche à merveille.

-----------------------------------------------------------------------------------
http://www.mesdevoirs.net -- Corrections de devoirs de mathématiques en ligne
0
Rejoignez-nous