Bonjour,
Voilà ce problème est peut-être tout à fait basique mais j'ai beaucoup cherché je ne trouve pas la solution. Il s'agit d'effacer les élément d'un container qui répondent à un prédicat, tout en les copiant dans un autre vecteur. En regardant la doc de la STL on pourrait croire que c'est très simple en voyant le nom des fonctions vector::erase et remove_copy_if. Seulement ce dernier algo, contrairement à remove_if, renvoie un output iterator, ce qui m'empêche de faire comme avec un remove_if :
Tous les exemples vu sur le net balancent les objets supprimés dans cout, ce qui ne m'apporte pas grand chose...
Code : Sélectionner tout - Visualiser dans une fenêtre à part v.erase(remove_copy_if(v.begin(), v.end(), [output], [predicat]), v.end()); // ne compile pas
Je suis donc obligé, chaque fois que je veux faire ça, de passer par des moyens détournés, du type : le foncteur qui sert de prédicat se charge de mettre dans une liste les objets pour lesquels son operator() renvoie true, et cette liste sera ensuite récupérée. Pour des problèmes un peu plus complexes, cette solution complique énormément le code. De plus, elle casse le principe 1 classe = 1 responsabilité.
Y a-t-il une solution pour utiliser le résultat d'un remove_copy_if avec un vector::erase, ou pour atteindre d'une autre façon l'objectif initial de façon "relativement" directe ?
Merci d'avance
Partager