Effacement d'element d'un vecteur [Résolu]

Signaler
Messages postés
52
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
5 juin 2007
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Bonjour,

j'ai un probleme avec l'une de mes methodes. Celle-ci efface l'element
d'un vecteur. Malheureusement elle ne fonctionne jamais pour le dernier
element du vecteur.

Voici mon code:

void Graphe::effacerArete(int nomOrigine,int nomDestination)/*Attention, il n'efface pas la derniere arete du vector*/

{

    ARETE a;

    int i = 0;

    vector::const_iterator itr = aretes.begin();

    vector::const_iterator fin = aretes.end();

    int test = 0;

    if(!existeArete(nomOrigine,nomDestination))

    {

        cout << "ERREUR: L'arete
que l'on veut effacer n'existe pas : "<< nomOrigine << " "
<< nomDestination << endl;

        test = true;

    }


    while(itr != fin && test!=2)

    {

        a = *itr;

        if((a.origine == nomOrigine
&& a.destination nomDestination)  || (a.origine
nomDestination && a.destination == nomOrigine))

        {

            cout <<
"ON A EFFACER L'ARETE : "<< a.origine << " " <<
a.destination << endl;

            aretes.erase(aretes.begin() + i);

            test ++;

        }

        itr ++;

        i ++;

    }

}


Quelqu'un peut il me renseigner sur ce probleme?

Merci d'avance,

Thomas

1 réponse

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Dans ton while, tu ne dois pas incrémenter itr à chaque fois, mais seulement quand tu ne fais pas d'erase:

while(itr != fin && test!=2)
{
a = *itr;
if(...)
{
itr = aretes.erase(aretes.begin() + i);
test ++;
}
else
itr ++;
i ++;
}