2016-11-23 5 views
-1

je la classe C++ suivante,Comment supprimer un élément d'un vecteur d'objets en C++?

class rec 
{ 
public: 
    int width; 
    int height; 
}; 

Et dans ma fonction principale que j'ai un vecteur avec rec objets,

rec r1,r2,r3; 
r1.height = r1.width = 1; 
r2.height = r2.width = 2; 
r3.height = r3.width = 3; 

vector<rec> rvec = { r1,r2,r3 }; 

Maintenant, je veux effacer un élément de rvec à l'appel de méthode suivante ,

rvec.erase(remove(rvec.begin(), rvec.end(), r_remove), rvec.end()); 

Mais j'eu cette erreur:

C2678: binary '==': no operator found which takes a left-hand operand of type 'rec' (or there is no acceptable conversion)

+3

Vous devez implémenter l'opérateur ==() pour la classe rec pour permettre la comparaison entre les objets rec. C'est ce que remove utilise pour trouver l'entrée qui correspond à r_remove. –

+0

Vous pouvez également essayer ['std :: remove_if'] (http://fr.cppreference.com/w/cpp/algorithm/remove) dans le cas où vous ne pouvez pas implémenter' operator == 'pour votre classe – StoryTeller

+0

Pour référence future, vous devriez noter que chaque algorithme comme un ensemble d'exigences pour les types qu'il accepte. Lisez la documentation et découvrez quelles sont ces exigences. [cppreference] (http://fr.cppreference.com/w/cpp/algorithm) est un bon endroit pour ajouter un signet. – StoryTeller

Répondre

5

Vous devez surcharger operator == pour votre structure de données personnalisée rec

class rec 
{ 
public: 
    int width; 
    int height; 
    bool operator==(const rec& rhs) { 
     return (width == rhs.width) && (height == rhs.height); 
    } 
}; 

depuis remove compare les valeurs par l'opérateur ==

+0

Merci @ Starl1ght, Cela a fonctionné parfaitement. J'ai seulement dû ajouter le nom de classe "rec" à la définition de l'opérateur: opérateur bool == (const rec & rhs) – MHS2015

+0

@ MHS2015 oui, un peu mistypo, désolé :) – Starl1ght