Advertisement
cesarcardinale

TP8 Exo 2 - Aix

May 24th, 2018
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>            // sort()
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. namespace{
  9.  
  10. class Pers{
  11.     string   myNom;
  12.     unsigned myAge;
  13.  
  14.   public :
  15.     Pers (const string & Nom, unsigned Age): myNom (Nom), myAge (Age) {}
  16.  
  17.     const string & getNom (void) const noexcept { return myNom; }
  18.     unsigned       getAge (void) const noexcept { return myAge; }
  19.   private :
  20.     ostream & display (ostream & os)  const{
  21.         return os << getAge () << " - " << getNom ();
  22.     } // display()
  23.  
  24.   public :
  25.     friend ostream & operator << (ostream & os, const Pers & p){
  26.         return p.display (os);
  27.     }
  28. }; // Pers
  29.  
  30. template <typename T>
  31. class IPredicatGen{
  32.   public :
  33.     virtual ~IPredicatGen (void) {}
  34.     virtual bool operator () (const T &) const = 0;
  35. }; // ILessThanGen
  36.  
  37. template <typename T, typename TRes>
  38. class IUnaryFunction{
  39.   public :
  40.     virtual ~IUnaryFunction (void) {}
  41.     virtual TRes operator () (const T &) const = 0;
  42. }; // ILessThanGen
  43.  
  44.     class SelParTrancheAge: public IUnaryFunction <Pers,bool>{
  45.         unsigned int myAgeMin;
  46.         unsigned int myAgeMax;
  47.       public :
  48.         SelParTrancheAge(unsigned ageMin, unsigned ageMax): myAgeMin(ageMin), myAgeMax(ageMax){}
  49.         virtual ~SelParTrancheAge (void) {}
  50.         virtual bool operator () (const Pers & pers1) const{
  51.             return (pers1.getAge() >= myAgeMin && pers1.getAge() <= myAgeMax);
  52.         }
  53.     }; // SelParTrancheAge
  54.  
  55.     class SelParNomMin : public IUnaryFunction <Pers,bool>{
  56.         string myNomMin;
  57.       public :
  58.         SelParNomMin(string nomMin) : myNomMin(nomMin) {}
  59.         virtual ~SelParNomMin() {}
  60.         virtual bool operator () (const Pers & pers1) const{
  61.             return pers1.getNom() > myNomMin;
  62.         }
  63.     };
  64.  
  65.     class TriParAgeAsc : public IPredicatGen <Pers>{
  66.       public :
  67.         virtual ~TriParAgeAsc (void) noexcept {}
  68.         virtual bool operator () (const Pers & p1, const Pers & p2)const noexcept{
  69.             return p1.getAge () <= p2.getAge ();
  70.         } // operator ()
  71.     }; // TriParAgeAsc
  72.  
  73.     class TriParNomDesc : public IPredicatGen <Pers>{
  74.       public :
  75.         virtual ~TriParNomDesc (void) noexcept {}
  76.  
  77.         virtual bool operator () (const Pers & p1, const Pers & p2)const noexcept{
  78.             return p1.getNom () >= p2.getNom ();
  79.         } // operator ()
  80.     }; // TriParNomDesc
  81.  
  82.     void functorFind (void){
  83.         cout << "FunctorFind&nbsp;: \n";
  84.  
  85.         typedef vector <Pers> CVPers;
  86.         CVPers vPers;
  87.  
  88.         vPers.push_back ( Pers ("Charlotte", 21));
  89.         vPers.push_back ( Pers ("Alfred",    12));
  90.         vPers.push_back ( Pers ("Jean",      42));
  91.         vPers.push_back ( Pers ("Noemie",    11));
  92.         vPers.push_back ( Pers ("Berthe",    99));
  93.         vPers.push_back ( Pers ("Agathe",    29));
  94.         vPers.push_back ( Pers ("Sylvain",   42));
  95.         vPers.push_back ( Pers ("Pierre",    75));
  96.  
  97.         for (const Pers & personne : vPers)
  98.             cout << personne << '\n';
  99.  
  100.         CVPers::const_iterator pos;
  101.  
  102.         cout << "\nRecherche sur  43 <= age <= 75 : ";
  103.  
  104.         pos = find_if (vPers.begin (), vPers.end (), SelParTrancheAge(43,75)); // a completer
  105.         if (vPers.end () == pos)
  106.             cout << "Aucun element ne correspond a ce critere\n";
  107.         else
  108.             cout << *pos << '\n';
  109.  
  110.         cout << "\nRecherche sur  43 <= age <= 45 : ";
  111.  
  112.         pos = find_if (vPers.begin (), vPers.end (), SelParTrancheAge(43,45));
  113.         if (vPers.end () == pos)
  114.             cout << "Aucun element ne correspond a ce critere\n";
  115.         else
  116.             cout << *pos << '\n';
  117.  
  118.         cout << '\n';
  119.  
  120.         cout << "\nRecherche sur nom > Noemie: ";
  121.  
  122.         pos = find_if (vPers.begin (),  vPers.end (), SelParNomMin("Noemie"));
  123.  
  124.         if (vPers.end () == pos)
  125.             cout  << "Aucun element ne correspond a ce critere\n";
  126.         else
  127.             cout << *pos << '\n';
  128.  
  129.         cout  << "\nRecherche sur nom > alfred: ";
  130.  
  131.         pos = find_if (vPers.begin (),  vPers.end (), SelParNomMin("alfred"));
  132.  
  133.         if (vPers.end () == pos)
  134.             cout  << "Aucun element ne correspond a ce critere\n";
  135.         else
  136.             cout << *pos << '\n';
  137.  
  138.     } // functorFind()
  139.  
  140. } // namespace
  141.  
  142. int main (void)
  143. {
  144.     functorFind ();
  145.  
  146.     return 0;
  147.  
  148. } // main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement