Méthodes de la classe vector en C++

Rom1PL Messages postés 12 Date d'inscription vendredi 30 novembre 2007 Statut Membre Dernière intervention 4 mars 2008 - 29 févr. 2008 à 10:59
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 29 févr. 2008 à 17:13
Bonjour,
J'aurais deux petites questions au sujet des méthodes de la classe vector en C++.

1) J'utilise la fonction erase pour supprimer un élément de mon vecteur mais mon compilo me donne l'erreur suivante "Could not find a match for 'vector >::erase(int)'.
voici le code de ma fonction qui pause problème :

void Basket::DeleteProduct(int indexProduct){
        SelectedProducts.erase(indexProduct);
        SelectedAmounts.erase(indexProduct);
        NumberOfItems = SelectedAmounts.size();
}

Je souhaite tout simple supprimer l'élément qui se trouve à l'index donné dans mes deux vecteurs SelectedProducts et SelectedAmount. En clerc je voudrais supprimer SelectedProducts[indexProduct] et SelectedAmounts[indexProduct].
J'ai pourtant vérifier sur des sites internets et la fonction erase utilise bien l'index de l'élément à supprimer en paramètre.

2) Mon autre question. Est-ce que quelqu'un sait s'il existe un équivalent de la fonction indexOf(ElementRecherché) des vecteurs JAVA en C++.  En fait j'ai un vecteur de pointeurs de Produit et j'aimerais une fonction qui me renvoi l'index d'une adresse de produit que je recherche dans mon vecteur.
Un truc du genre MonVecteurDeProduit.indexOf(&ProduitRecherché)

Merci beauoup d'avance.

7 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
29 févr. 2008 à 11:09
Salut,

Pour ta question 1) regarde ici :
http://msdn2.microsoft.com/en-us/library/ceh559x2(VS.80).aspx

Pour ta question 2), il n'y a pas de fonction de ce genre à ma connaissance.

Shell
0
Rom1PL Messages postés 12 Date d'inscription vendredi 30 novembre 2007 Statut Membre Dernière intervention 4 mars 2008
29 févr. 2008 à 11:37
Je viens de jeter un coup d'oeil sur le lien que tu viens de me donner mais je ne parvient pas à trouver mon erreur. En effet ils disent bien que la fonction erase prend comme paramètre la position de l'élément qui doit être supprimé. Or c'est ce que je fait lorsque je fais SelectedProducts.erase(indexProduct);
J'ai également essayé de faire unSelectedProducts.erase(&Product); mais cela ne donne rien de mieux.
Merci beaucoup pour ton aide.
Si desfois tu vois l'erreur...
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
29 févr. 2008 à 12:04
Il faut utiliser un itérateur. regarde bien leur exemple tu verras ton erreur.

Shell
0
Rom1PL Messages postés 12 Date d'inscription vendredi 30 novembre 2007 Statut Membre Dernière intervention 4 mars 2008
29 févr. 2008 à 12:30
Je suis désolé DeAtHCrAsH, j'ai beau analyser leur exemple et je ne vois pas mon erreur car mon indexProduct est déjà un itérateur il me semble, non ?
0

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

Posez votre question
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
29 févr. 2008 à 16:15
Salut
void Basket::DeleteProduct(vector::iterator indexProduct){
        SelectedProducts.erase(indexProduct);
        SelectedAmounts.erase(indexProduct);
        NumberOfItems = SelectedAmounts.size();
}
je suis heureux de faire partie d'une grande famille ...!
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
29 févr. 2008 à 17:11
Question 1

void Basket::DeleteProduct(int indexProduct){
        SelectedProducts.erase(SelectedProducts.begin() + indexProduct); // opérateur d'addition sur les itérateurs.
        SelectedAmounts.erase(SelectedProducts.begin() + indexProduct);
        NumberOfItems = SelectedAmounts.size();
}

Marche seulement pour certain type d'itérateur, notamment ceux des std::vector.

Question 2
normalement tu as la fonction std::find du header "algorithm". Il s'agira ici d'une comparaison entre pointeur par défaut. Le plus simple étant de refaire toi meme la fonction de recherche.

http://www.cplusplus.com/reference/algorithm/find.html
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
29 févr. 2008 à 17:13
Tu corrigeras, j'ai fais une erreur de copié collé.
Et juste une remarque, un indice (ton indexProduct) n'a rien à voir avec un iterateur.
0
Rejoignez-nous