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

  1. //---------------------------------------------------------------------------
  2.  
  3. #include <iostream>
  4. #include <vector>
  5. #include <algorithm>
  6.  
  7. //---------------------------------------------------------------------------
  8. //  soubor:    f22_podraz_citac.cpp
  9. //  autor:     Jaroslav Franek
  10. //  vytvoreno: 20011125
  11. //  copyright: (c) 2001 Jaroslav Franek
  12. //  umisteni:  Chip CD, rubrika Chip Plus, 02/02
  13. //  reference: Jak se na funktor vola... II. dil, Chip 02/02
  14. //  testovano v : Borland C++ Builder 5.0 (nahodou to funguje jak ma)
  15. //
  16. //  komentar:  podraz poradi
  17. //---------------------------------------------------------------------------
  18.  
  19. //---------------------------------------------------------------------------
  20. //
  21. //  funktor cKazdyTreti
  22. //  pri kazdem tretim volani vraci 1 (true), jinak vraci 0 (false)
  23. //  (trochu jsme to zeslozitili, v clanku je to jen cTreti, cili pouze treti...)
  24. //
  25. //---------------------------------------------------------------------------
  26.  
  27. class cKazdyTreti
  28. {
  29. public:
  30.    cKazdyTreti() : pocet_(0) {}
  31.    bool operator ()(int)
  32.    {
  33.       return !((++pocet_) % 3);
  34.    }
  35. private:
  36.    int pocet_;
  37. };
  38.  
  39. //---------------------------------------------------------------------------
  40. //
  41. //  kde je chyba?
  42. //
  43. //---------------------------------------------------------------------------
  44.  
  45. int main()
  46. {
  47.    // nejdrive si pripravime pole
  48.    const int N = 9;
  49.    int pole[] = { -1, -2, 3, -4, 0, -6, 0, -8, 9 };
  50.  
  51.    // a ted STL kontejner
  52.    std::vector<int> cisla(pole, pole + N);   // N prvku, pole[i]
  53.  
  54.    // vypiseme si to
  55.    std::cout << "cisla    : ";
  56.    std::copy(cisla.begin(), cisla.end(), std::ostream_iterator<int>(std::cout, "  "));
  57.    std::cout << std::endl;
  58.  
  59. //*******************************************************************
  60.    // transformujeme: NEPRENOSITELNY KOD
  61.    // standard C++ negarantuje u funkce transform poradi volani
  62.    std::transform(cisla.begin(), cisla.end(), cisla.begin(), cKazdyTreti());
  63. //*******************************************************************
  64.  
  65.    // vypiseme si to
  66.    std::cout << "cisla    : ";
  67.    std::copy(cisla.begin(), cisla.end(), std::ostream_iterator<int>(std::cout, "  "));
  68.    std::cout << std::endl;
  69.  
  70.    // pokud vam to funguje, ani si neuvedomite,
  71.    // ze nekomu jinemu to fungovat nemusi
  72.  
  73.    return 0;
  74. }
  75. //---------------------------------------------------------------------------
  76.