Vector et erase => mais pourquoi ca veut pas marcher !?!?!?!?!?!

Résolu
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 - 26 mai 2005 à 19:41
Nylom Messages postés 6 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 28 mai 2010 - 26 avril 2010 à 14:40
bjr a tous
j'ai un petit probleme avec les vector:

je declare un vector en variable globale de type que g moi meme defini
et les element sont ajouter dynamiquement et je voudrai proposer une fonction pour supprimer un element au choix donc g ecris ma fonction comme ceci :

void supprime(){
//listage du vecteur
for(int i = 0;i<stock.size();i++)
cout<>suppression;
//on enleve ce qui pourrai rester
string garbage;
getline(cin,garbage);
// et on supprime


stock.erase(suppression); //=> declenche une erreur
};

erreur sous :
-----vc++ : main.cpp(46) : error C2664: 'class Produit *__thiscall std::vector<class Produit,class std::allocator<class Produit> >::erase(class Produit *)' : cannot convert parameter 1 from 'int' to 'class Produi
t *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
produit.cpp

------ dev-cpp : no matching function for call to `std::vector >::erase(Produit&)'

avez vous une idee de comment resoudre mon probleme ?
merci
"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"

6 réponses

steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
26 mai 2005 à 21:05
stock.erase( stock.begin() + suppression ); // a voir si ca compile

Il est impératif de récupèrer la valeur (iterator) retour de .erase() car les iterateurs relatifs en amont sont invalidés.
3
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
26 mai 2005 à 21:29
Dans ton cas ce n'est pas nécéssaire, en gros quand tu supprimes un
élément dans un vector les élément suivant sont décalé "d'une case" en
arriere.
3
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
26 mai 2005 à 20:37
On passe à la méthode erase() un itérateur sur l'élément que l'on veut effacer.

Kaid - kaid.fr.st
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
26 mai 2005 à 21:21
ca marche merci bcp
mais g pas compri ce qui etait imperatif (je debute en c++)

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
27 mai 2005 à 18:47
a ok faire une sorte de raffraichissement pour eviter une erreur a cause d'un iterateur qui pointe un mauvais element ?

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
Nylom Messages postés 6 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 28 mai 2010
26 avril 2010 à 14:40
Bonjour,

J'ai un peu le même problème, j'utilise un vecteur de string (vector<string>) et je veux éffacer les éléments de mon vecteur. Donc je fait mon_vecteur.erase(mon_vecteur.begin(), mon_vecteur.end()) je n'ai pas de problème de compilation mais à l'exécution je vois que les éléments qui devraient être supprimer ne le sont pas.

Quelqu'un peut m'aider?
0
Rejoignez-nous