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

[Résolu]
Signaler
Messages postés
2448
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
-
Messages postés
6
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
28 mai 2010
-
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

Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
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.
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
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.
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

On passe à la méthode erase() un itérateur sur l'élément que l'on veut effacer.

Kaid - kaid.fr.st
Messages postés
2448
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
17
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"
Messages postés
2448
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
17
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"
Messages postés
6
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
28 mai 2010

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?