home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 February
/
Chip_2002-02_cd1.bin
/
chplus
/
funktor
/
f23_podraz_poradi.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2002-01-02
|
2KB
|
76 lines
//---------------------------------------------------------------------------
#include <iostream>
#include <vector>
#include <algorithm>
//---------------------------------------------------------------------------
// soubor: f22_podraz_citac.cpp
// autor: Jaroslav Franek
// vytvoreno: 20011125
// copyright: (c) 2001 Jaroslav Franek
// umisteni: Chip CD, rubrika Chip Plus, 02/02
// reference: Jak se na funktor vola... II. dil, Chip 02/02
// testovano v : Borland C++ Builder 5.0 (nahodou to funguje jak ma)
//
// komentar: podraz poradi
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//
// funktor cKazdyTreti
// pri kazdem tretim volani vraci 1 (true), jinak vraci 0 (false)
// (trochu jsme to zeslozitili, v clanku je to jen cTreti, cili pouze treti...)
//
//---------------------------------------------------------------------------
class cKazdyTreti
{
public:
cKazdyTreti() : pocet_(0) {}
bool operator ()(int)
{
return !((++pocet_) % 3);
}
private:
int pocet_;
};
//---------------------------------------------------------------------------
//
// kde je chyba?
//
//---------------------------------------------------------------------------
int main()
{
// nejdrive si pripravime pole
const int N = 9;
int pole[] = { -1, -2, 3, -4, 0, -6, 0, -8, 9 };
// a ted STL kontejner
std::vector<int> cisla(pole, pole + N); // N prvku, pole[i]
// vypiseme si to
std::cout << "cisla : ";
std::copy(cisla.begin(), cisla.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
//*******************************************************************
// transformujeme: NEPRENOSITELNY KOD
// standard C++ negarantuje u funkce transform poradi volani
std::transform(cisla.begin(), cisla.end(), cisla.begin(), cKazdyTreti());
//*******************************************************************
// vypiseme si to
std::cout << "cisla : ";
std::copy(cisla.begin(), cisla.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
// pokud vam to funguje, ani si neuvedomite,
// ze nekomu jinemu to fungovat nemusi
return 0;
}
//---------------------------------------------------------------------------