Comfirmer moi si mon predicat est bon ???

Comfirmer moi si mon predicat est bon ??? - C++ - Programmation

Marsh Posté le 06-07-2003 à 03:09:00    

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 :
  1. bool carre :: zero (float n)
  2. {
  3.    if (n< 0.02 && n!=0)
  4.       return true;
  5.    else
  6.       return false;
  7. }


 
pour l'uliser :
 

Code :
  1. bool carre :: verif_position(list<float> &lx)
  2. {
  3.   list<float>::iterator gauche;
  4.    
  5.    gauche = find_if (lx.begin (), lx.end (), zero);
  6.    if ( (gauche !=lx.end() )
  7.    {
  8. //pas trouvé  
  9. return false;
  10.    }
  11.    else
  12.    {
  13. //trouvé
  14. return true;
  15.    }
  16. }


 
j'ai comme message d'erreur :

Citation :

Error:  algorith.h(111,1):Call of nonfunction


 
et ca vient de la ds algorithm.h  

Code :
  1. template <class InputIterator, class Predicate>
  2. InputIterator find_if (InputIterator first, InputIterator last, Predicate pred)
  3. {
  4.     while (first != last && !pred(*first)) ++first;
  5.     return first;
  6. }


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 :
  1. list<float>::iterator gauche, gauche_debut;
  2. gauche_debut = lx.begin ();
  3. do {
  4. gauche = find_if (gauche_debut, lx.end (), bind2nd (std::less<float> (), 0.02));
  5. // si je trouve zero commme elements
  6. if ((*gauche) == 0)
  7. //je copie l'adresse de l'element contenant 0  
  8.     gauche_debut = gauche;
  9.     //et je passe à l'element superieur, dorenavant je ferais ma recherche à partir de cette nouvelle adresse
  10.     gauche_debut++; 
  11. }     
  12.  
  13.    } //tant que l'lement trouvé =0, je recommence la recherche
  14. 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
Reply

Marsh Posté le 06-07-2003 à 03:09:00   

Reply

Marsh Posté le 06-07-2003 à 10:45:38    

c'est parcequ'une fonction membre n'est pas une fonction comme les autres.
 
fais un objet fonction / utilise mem_fun_ref.
 
sinon fais quelque révision de logique parce que
 
if(true) return true else return false;
 
ça c'est balaise
 
et ta fonction zero devrait etre const et static

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed