home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 February
/
Chip_2002-02_cd1.bin
/
chplus
/
funktor
/
f17_stl_negator.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2002-01-02
|
3KB
|
81 lines
//---------------------------------------------------------------------------
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
//---------------------------------------------------------------------------
// soubor: f17_stl_negator.cpp
// autor: Jaroslav Franek
// vytvoreno: 20011124
// 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
// Microsoft Visual C++ .NET 7.0 (beta2)
//
// komentar: stl negatory a jejich vytvorujici funkce
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//
// (ne)prakticka ukazka
//
//---------------------------------------------------------------------------
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 na obrazovku,
std::cout << "cisla : ";
std::copy(cisla.begin(), cisla.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
std::cout << "ted pouzijeme negator, binder a funktor 'greater'\n";
//*******************************************************************
// ted najdeme prvni nezaporny prvek (>=0), za pomoci negatoru a binderu
std::vector<int>::iterator
prvni_nezaporny(std::find_if(cisla.begin(), cisla.end(),
std::not1(std::bind1st(std::greater<int>(), 0))));
if ( prvni_nezaporny != cisla.end() )
//*******************************************************************
{
std::cout << "prvni nezaporny prvek vektoru 'cisla' je " << *prvni_nezaporny;
}
else
{
std::cout << "vektor 'cisla' neobsahuje zadny nezaporny prvek";
}
std::cout << std::endl;
std::cout << "ted pouzijeme binder a funktor 'greater_equal'\n";
//*******************************************************************
// ted najdeme prvni nezaporny prvek (>=0), tentokrat efektivneji
std::vector<int>::iterator
prvni_nezaporny2(std::find_if(cisla.begin(), cisla.end(),
std::bind2nd(std::greater_equal<int>(), 0)));
if ( prvni_nezaporny2 != cisla.end() )
//*******************************************************************
{
std::cout << "prvni nezaporny prvek vektoru 'cisla' je " << *prvni_nezaporny2;
}
else
{
std::cout << "vektor 'cisla' neobsahuje zadny nezaporny prvek";
}
std::cout << std::endl;
return 0;
}
//---------------------------------------------------------------------------