problème avec itérator c++

problème avec itérator c++ - C++ - Programmation

Marsh Posté le 01-03-2010 à 01:47:55    

Bonjour,  
j'ai un problème avec une fonction qui a pour objectif de supprimer un élement d'un vecteur en fait j'ai un vecteur de classe economie  
les attributs de la classe economie sont de contrats et un double (contrats c'est une classe qui a une cle) le code de la fonction est le suivant  
void Delet(int P,int Q,vector<economie>&Slist)
{ vector<economie>::iterator vItr = Slist.begin();
     while ( vItr != Slist.end() )
            {if ( vItr->mFirst.cle == P && vItr->mSecond.cle == Q )
                 {vItr = Slist.erase( vItr );
                             break;
                 }
 
             else vItr++;
            }
 }
 
les entiers P et Q sont les clés des deux contrats donc la fonction va vérifier si les deux clés existent et va localiser puis supprimer l,element mais ma lheurseument quand je teste ma fonction je vois qu'elle n'a aucun effet  
Merci de m'aider. j,ai cherché sur internet une réponse à  mon problème je vois parfois les itérateurs deviennent invalide mais je ne vois pas comment de les rendre valides merci

Reply

Marsh Posté le 01-03-2010 à 01:47:55   

Reply

Marsh Posté le 01-03-2010 à 07:09:11    

tu sais qu'il existe std::find qui t'eviteras d'ecrire un while moche.
tu std::fidn et tu erase l'iterateur qui t'es renvoyé

Reply

Marsh Posté le 01-03-2010 à 15:23:41    

Merci de ta réponse mais j'ai résolu mon problème c'était le test que je fais qui ne marche pas car je luis donne des un P invalide comme delete(0,1) alors que P varie entre 1 et 3 c'est juste à cause de moi je voulais que les contrats ont une clé comme les vecteurs commencent à 0 mais j'ai oublié de lui mentionner ça en tout cas j'ai perdu 3 jours à m,arracher les cheveux mais c,est comme ça je vais progresser .
bonne journée

Reply

Marsh Posté le 01-03-2010 à 15:46:42    

Si tu veux progresser, écoute Joel F!
Ton truc s'écrit en 2 lignes de vrai C++.


---------------
deluser --remove-home ptitchep
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed