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

  1. //---------------------------------------------------------------------------
  2.  
  3. #include <iostream>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <functional>
  7.  
  8. //---------------------------------------------------------------------------
  9. //  soubor:    f16_stl_binder.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 bindery a jejich vytvorujici funkce
  19. //---------------------------------------------------------------------------
  20.  
  21. //---------------------------------------------------------------------------
  22. //
  23. //  prakticka ukazka
  24. //
  25. //---------------------------------------------------------------------------
  26.  
  27. int main()
  28. {
  29.    // nejdrive si pripravime kontejnery
  30.    const int N = 9;
  31.    int pole[] = { 0, -2, 3, -4, 5, -6, 7, -8, 9 };
  32.    int polex[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  33.  
  34.    // a ted STL kontejnery
  35.    std::vector<int> cisla(pole, pole + N);               // N prvku, pole[i]
  36.    std::vector<int> jen_kladna_cisla(polex, polex + N);  // N prvku, polex[i]
  37.  
  38.    // vypiseme na obrazovku,
  39.    std::cout << "cisla            : ";
  40.    std::copy(cisla.begin(), cisla.end(), std::ostream_iterator<int>(std::cout, "  "));
  41.    std::cout << "\n"
  42.                 "jen_kladna_cisla : ";
  43.    std::copy(jen_kladna_cisla.begin(), jen_kladna_cisla.end(), std::ostream_iterator<int>(std::cout, "  "));
  44.    std::cout << std::endl;
  45.  
  46.    //  funkce find_if vraci iterator na prvni prvek, ktery splnuje podminku;
  47.    //  pokud zadny prvek nesplnuje podminku, vraci find_if iterator
  48.    //  na prvni "prvek" za poslednim (one past end), neboli zde cisla.end()
  49.  
  50. //*******************************************************************
  51.    // hledame prvnφ kladn² prvek vektoru cisla (>0)
  52.    std::vector<int>::iterator
  53.       prvni_kladny(std::find_if(cisla.begin(), cisla.end(),
  54.                                 std::bind2nd(std::greater<int>(), 0)));
  55.    if ( prvni_kladny != cisla.end() )
  56. //*******************************************************************
  57.    {
  58.       std::cout << "prvni kladny prvek vektoru 'cisla' je " << *prvni_kladny;
  59.    }
  60.    else
  61.    {
  62.       std::cout << "vektor 'cisla' neobsahuje zadny kladny prvek";
  63.    }
  64.    std::cout << std::endl;
  65.  
  66. //*******************************************************************
  67.    // hledame prvnφ zßporn² prvek (<0)
  68.    std::vector<int>::iterator
  69.       prvni_zaporny(std::find_if(cisla.begin(), cisla.end(),
  70.                                  std::bind1st(std::greater<int>(), 0)));
  71.    if (  prvni_zaporny != cisla.end() )
  72. //*******************************************************************
  73.    {
  74.       std::cout << "prvni zaporny prvek vektoru 'cisla' je " << *prvni_zaporny;
  75.    }
  76.    else
  77.    {
  78.       std::cout << "vektor 'cisla' neobsahuje zadny zaporny prvek";
  79.    }
  80.    std::cout << std::endl;
  81.  
  82.  
  83. //*******************************************************************
  84.    // hledame prvnφ zßporn² prvek mezi samymi kladnymi -> nenajdeme nic
  85.    std::vector<int>::iterator
  86.       prvni_zaporny2(std::find_if(jen_kladna_cisla.begin(), jen_kladna_cisla.end(),
  87.                                  std::bind1st(std::greater<int>(), 0)));
  88.    if (  prvni_zaporny2 != jen_kladna_cisla.end() )
  89. //*******************************************************************
  90.    {
  91.       std::cout << "prvni zaporny prvek vektoru 'jen_kladna_cisla' je " << *prvni_zaporny2;
  92.    }
  93.    else
  94.    {
  95.       std::cout << "vektor 'jen_kladna_cisla' neobsahuje zadny zaporny prvek";
  96.    }
  97.    std::cout << std::endl;
  98.  
  99.    return 0;
  100. }
  101. //---------------------------------------------------------------------------
  102.