Méthodes de la classe vector en C++

Signaler
Messages postés
12
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
4 mars 2008
-
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
-
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

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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
Messages postés
12
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
4 mars 2008

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...
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Il faut utiliser un itérateur. regarde bien leur exemple tu verras ton erreur.

Shell
Messages postés
12
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
4 mars 2008

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 ?
Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
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 ...!
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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.