| 12
 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