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 32 33 34
| #include <algorithm>
#include <vector>
#include <string>
// foncteur pour générer un conteneur qui contient des int*
struct MyGenerate
{
MyGenerate():count_(0){}
int* operator()(){return new int(count_++);}
int count_;
};
// prédicat qui retroune vrai si number pointe sur un entier impair
bool IsOdd(int *number){ return (*number)&1;}
int main()
{
// on déclare un vecteur de 10 pointeurs sur un int
std::vector<int*> v(10);
// on génère le vecteur de façon à ce que *(v[i])=i
std::generate(v.begin(), v.end(), MyGenerate() );
// à ce stade de l'exécution, notre vecteur vaut {0, 1, 2, 3, 4, ..., 9} (sauf que ce sont des pointeurs, pas directement des int)
// on supprime tous les pointeurs sur des entiers impairs de v
std::vector<int*>::iterator it = std::remove_if( v.begin(), v.end(), IsOdd );
// à ce stade de l'exécution, notre vecteur vaut {0,2,4,6,8,5,6,7,8,9} (sauf que ce sont des pointeurs, pas directement des int)
// on supprime la partie superflue
std::vector<int*>(v.begin(), it).swap( v );
// maintenant, notre vecteur vaut {0,2,4,6,8} (sauf que ce sont des pointeurs, pas directement des int)
return 0;
} |