1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| // les données dans le vecteur
struct typeDonnee {
...
std::string const& getNom() const;
};
// Le foncteur-prédicat, cf FAQ
struct TesteNom {
TesteNom(std::string const& nom) : nom_(nom) {}
bool operator()(typeDonne const* d) const {
return d->getNom() == nom_;
}
private:
std::string nom_;
};
typedef std::vector<typeDonnee> vector_t;
vector_t VI;
.... // remplissage
// déplace les éléments dont le nom vaut test à la fin du vecteur
vector_t::const_iterator coupe_a_partir
= std::remove_if(VI.begin(), VI.end(), TesteNom(test));
// Pas oublier de libérer les éléments (si tu utilises des pointeurs
// bruts (i.e. non intelligents) devant être libérés).
// Cf FAQ pour définition de DeleteObject (ou MEC++)
for_each(coupe_a_partir, VI.end(), DeleteObject());
// Et enfin, on coupe ce qui dépasse du vecteur
VI.erase(coupe_a_partir, VI.end()); |
Partager