home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 February / Chip_2002-02_cd1.bin / chplus / funktor / f17_stl_negator.cpp < prev    next >
C/C++ Source or Header  |  2002-01-02  |  3KB  |  81 lines

  1. //---------------------------------------------------------------------------
  2.  
  3. #include <iostream>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <functional>
  7.  
  8. //---------------------------------------------------------------------------
  9. //  soubor:    f17_stl_negator.cpp
  10. //  autor:     Jaroslav Franek
  11. //  vytvoreno: 20011124
  12. //  copyright: (c) 2001 Jaroslav Franek
  13. //  umisteni:  Chip CD, rubrika Chip Plus, 02/02
  14. //  reference: Jak se na funktor vola... II. dil, Chip 02/02
  15. //  testovano v : Borland C++ Builder 5.0
  16. //                Microsoft Visual C++ .NET 7.0 (beta2)
  17. //
  18. //  komentar:  stl negatory a jejich vytvorujici funkce
  19. //---------------------------------------------------------------------------
  20.  
  21. //---------------------------------------------------------------------------
  22. //
  23. //  (ne)prakticka ukazka
  24. //
  25. //---------------------------------------------------------------------------
  26.  
  27. int main()
  28. {
  29.    // nejdrive si pripravime pole
  30.    const int N = 9;
  31.    int pole[] = { -1, -2, 3, -4, 0, -6, 0, -8, 9 };
  32.  
  33.    // a ted STL kontejner
  34.    std::vector<int> cisla(pole, pole + N);               // N prvku, pole[i]
  35.  
  36.    // vypiseme na obrazovku,
  37.    std::cout << "cisla            : ";
  38.    std::copy(cisla.begin(), cisla.end(), std::ostream_iterator<int>(std::cout, "  "));
  39.    std::cout << std::endl;
  40.  
  41.    std::cout << "ted pouzijeme negator, binder a funktor 'greater'\n";
  42.  
  43. //*******************************************************************
  44.    // ted najdeme prvni nezaporny prvek (>=0), za pomoci negatoru a binderu
  45.    std::vector<int>::iterator
  46.       prvni_nezaporny(std::find_if(cisla.begin(), cisla.end(),
  47.                                    std::not1(std::bind1st(std::greater<int>(), 0))));
  48.    if ( prvni_nezaporny != cisla.end() )
  49. //*******************************************************************
  50.    {
  51.       std::cout << "prvni nezaporny prvek vektoru 'cisla' je " << *prvni_nezaporny;
  52.    }
  53.    else
  54.    {
  55.       std::cout << "vektor 'cisla' neobsahuje zadny nezaporny prvek";
  56.    }
  57.    std::cout << std::endl;
  58.  
  59.    std::cout << "ted pouzijeme binder a funktor 'greater_equal'\n";
  60.  
  61. //*******************************************************************
  62.    // ted najdeme prvni nezaporny prvek (>=0), tentokrat efektivneji
  63.    std::vector<int>::iterator
  64.       prvni_nezaporny2(std::find_if(cisla.begin(), cisla.end(),
  65.                                    std::bind2nd(std::greater_equal<int>(), 0)));
  66.    if ( prvni_nezaporny2 != cisla.end() )
  67. //*******************************************************************
  68.    {
  69.       std::cout << "prvni nezaporny prvek vektoru 'cisla' je " << *prvni_nezaporny2;
  70.    }
  71.    else
  72.    {
  73.       std::cout << "vektor 'cisla' neobsahuje zadny nezaporny prvek";
  74.    }
  75.    std::cout << std::endl;
  76.  
  77.    return 0;
  78. }
  79. //---------------------------------------------------------------------------
  80.  
  81.