home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 February
/
Chip_2002-02_cd1.bin
/
chplus
/
funktor
/
f16_stl_binder.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2002-01-02
|
4KB
|
102 lines
//---------------------------------------------------------------------------
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
//---------------------------------------------------------------------------
// soubor: f16_stl_binder.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 bindery a jejich vytvorujici funkce
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//
// prakticka ukazka
//
//---------------------------------------------------------------------------
int main()
{
// nejdrive si pripravime kontejnery
const int N = 9;
int pole[] = { 0, -2, 3, -4, 5, -6, 7, -8, 9 };
int polex[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// a ted STL kontejnery
std::vector<int> cisla(pole, pole + N); // N prvku, pole[i]
std::vector<int> jen_kladna_cisla(polex, polex + N); // N prvku, polex[i]
// vypiseme na obrazovku,
std::cout << "cisla : ";
std::copy(cisla.begin(), cisla.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n"
"jen_kladna_cisla : ";
std::copy(jen_kladna_cisla.begin(), jen_kladna_cisla.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
// funkce find_if vraci iterator na prvni prvek, ktery splnuje podminku;
// pokud zadny prvek nesplnuje podminku, vraci find_if iterator
// na prvni "prvek" za poslednim (one past end), neboli zde cisla.end()
//*******************************************************************
// hledame prvnφ kladn² prvek vektoru cisla (>0)
std::vector<int>::iterator
prvni_kladny(std::find_if(cisla.begin(), cisla.end(),
std::bind2nd(std::greater<int>(), 0)));
if ( prvni_kladny != cisla.end() )
//*******************************************************************
{
std::cout << "prvni kladny prvek vektoru 'cisla' je " << *prvni_kladny;
}
else
{
std::cout << "vektor 'cisla' neobsahuje zadny kladny prvek";
}
std::cout << std::endl;
//*******************************************************************
// hledame prvnφ zßporn² prvek (<0)
std::vector<int>::iterator
prvni_zaporny(std::find_if(cisla.begin(), cisla.end(),
std::bind1st(std::greater<int>(), 0)));
if ( prvni_zaporny != cisla.end() )
//*******************************************************************
{
std::cout << "prvni zaporny prvek vektoru 'cisla' je " << *prvni_zaporny;
}
else
{
std::cout << "vektor 'cisla' neobsahuje zadny zaporny prvek";
}
std::cout << std::endl;
//*******************************************************************
// hledame prvnφ zßporn² prvek mezi samymi kladnymi -> nenajdeme nic
std::vector<int>::iterator
prvni_zaporny2(std::find_if(jen_kladna_cisla.begin(), jen_kladna_cisla.end(),
std::bind1st(std::greater<int>(), 0)));
if ( prvni_zaporny2 != jen_kladna_cisla.end() )
//*******************************************************************
{
std::cout << "prvni zaporny prvek vektoru 'jen_kladna_cisla' je " << *prvni_zaporny2;
}
else
{
std::cout << "vektor 'jen_kladna_cisla' neobsahuje zadny zaporny prvek";
}
std::cout << std::endl;
return 0;
}
//---------------------------------------------------------------------------