voila j'aimerais savoir si ma liste ou non un elements plus plus petit que 0.03 et qui soit différent de 0
je pensais faire mon propre predicat :
Code :
- bool carre :: zero (float n)
- {
- if (n< 0.02 && n!=0)
- return true;
- else
- return false;
- }
|
pour l'uliser :
Code :
- bool carre :: verif_position(list<float> &lx)
- {
- list<float>::iterator gauche;
-
- gauche = find_if (lx.begin (), lx.end (), zero);
- if ( (gauche !=lx.end() )
- {
- //pas trouvé
- return false;
- }
- else
- {
- //trouvé
- return true;
- }
- }
|
j'ai comme message d'erreur :
Citation :
Error: algorith.h(111,1):Call of nonfunction
|
et ca vient de la ds algorithm.h
Code :
- template <class InputIterator, class Predicate>
- InputIterator find_if (InputIterator first, InputIterator last, Predicate pred)
- {
- while (first != last && !pred(*first)) ++first;
- return first;
- }
|
ne connaissant pas bien pour le moment les templates, je sais pas d'ou vient mon erreur
ne trouvant pas j'ai essayé de faire un truc ds le genre ms cela ne fonctionne pas bien, j'ai une boucle infini (pb de pointeur peut etre qui ne pointe sur quelques choses qui a été effacé):
Code :
- list<float>::iterator gauche, gauche_debut;
- gauche_debut = lx.begin ();
- do {
- gauche = find_if (gauche_debut, lx.end (), bind2nd (std::less<float> (), 0.02));
- // si je trouve zero commme elements
- if ((*gauche) == 0)
- { //je copie l'adresse de l'element contenant 0
- gauche_debut = gauche;
- //et je passe à l'element superieur, dorenavant je ferais ma recherche à partir de cette nouvelle adresse
- gauche_debut++;
- }
-
- } //tant que l'lement trouvé =0, je recommence la recherche
- while ( (*gauche) ==0);
|
ms en fait je viens de me rendre compte que je pourrais tout simplement parcourir ma list avec un iterateur et tester les valeurs.
cela dit j'aimerais bien le faire avec un predicat.
Message édité par weed le 06-07-2003 à 03:10:29