supprimer des éléments avec une valeur spécifique de std::list
J'ai besoin de supprimer des éléments avec une valeur spécifique de std::list. Avec le list<int>
j'ai utilisé la méthode remove ().
Maintenant, j'ai list<CMyClass>
alors j'ai pensé que je devrais utiliser remove_if() mais c'est prédicat prend un seul paramater - l'élément à tester.
Comment puis-je écrire une fonction foo(const CMyClass &Bad)
qui enlève de la liste de tous les éléments égaux à Mauvais?
Grâce
PS
struct CMyClass {
void *Ptr;
int Var;
}
bool is_equal(const CMyClass &A, const CMyClass &B)
{
if (A.Ptr == B.Prt and A.Var == B.Var)
return true;
else
return false;
}
s'il vous plaît ajouter CMyClass exemple de définition et de critères de correspondance.
Je pense que le principal problème est que vous ne pouvez pas soumettre une autre paramètre de données que vous pouvez utiliser pour comparer. Je ne sais pas si les objets de fonction peut vous aider ici (jamais utilisé).
Je pense que le principal problème est que vous ne pouvez pas soumettre une autre paramètre de données que vous pouvez utiliser pour comparer. Je ne sais pas si les objets de fonction peut vous aider ici (jamais utilisé).
OriginalL'auteur jackhab | 2009-03-24
Vous devez vous connecter pour publier un commentaire.
Votre classe doit implémenter l'opérateur == dans votre ClassName
et puis vous pouvez utiliser
S'il est raisonnable de votre classe d'opérateur == ( et pas seulement pour les supprimer ) - de la liste::remove est bonne pour vous la solution. Si l'opérateur == seulement pour la liste::remove qu'il est préférable d'utiliser remove_if.
Dans l'exemple suivant de la liste::remove et de la liste::remove_if est démontrée.
Il utilise l' ==-opérateur (que vous pouvez remplacer dans votre classe)
Voulez-vous une solution sans opérateur ==? Alors s'il vous plaît dites comment voulez-vous comparer des valeurs ou de nous donner le nom d'une fonction qui peut faire cela?
std::list::supprimer le membre de la fonction qui est privilégiée std::remove + std::list::erase.
Merci. J'ai utiliser la liste est si rare que j'oublie toujours de cela.
OriginalL'auteur Mykola Golubyev
Pour supprimer tous les éléments en fonction d'un Prédicat:
ou de supprimer tous les éléments avec la valeur 42:
ou pour une liste de CMyClass:
OriginalL'auteur dalle
Créer une classe qui prend la mauvaise valeur et la stocke dans une variable membre. Puis mettre en œuvre le
De passer une instance de cet objet pour remove_if
OriginalL'auteur Mr Fooz
Vous pouvez simplement effectuer une itération sur les éléments, de les comparer et de les effacer, si la condition est satisfaite, par exemple:
OriginalL'auteur Patrick Glandien
Mettre en œuvre operator==(const CMyClass &).
par exemple:
Résultat:
1
8
8
OriginalL'auteur Thomas L Holaday
Ou si vous voulez surcharge == vous pouvez faire:
Et puis:
OriginalL'auteur drby
Essayez d'utiliser la remove_if méthode
http://www.sgi.com/tech/stl/remove_if.html
OriginalL'auteur JaredPar