Алгоритм find_if()

Алгоритм find_if()

template class InputIterator, class Predicate

InputIterator

find_if( InputIterator first,

InputIterator last, Predicate pred );

К каждому элементу из диапазона [first,last) последовательно применяется предикат pred. Если он возвращает true, поиск прекращается. find_if() возвращает итератор типа InputIterator, указывающий на найденный элемент; в противном случае возвращается last.

#include algorithm

#include list

#include set

#include string

#include iostream.h

// альтернатива оператору равенства

// возвращает true, если строка содержится в объекте-члене FriendSet

class OurFriends { // наши друзья

public:

bool operator()( const string& str ) {

return ( friendset.count( str ));

}

static void

FriendSet( const string *fs, int count ) {

copy( fs, fs+count,

inserter( friendset, friendset.end() ));

}

private:

static set string, lessstring, allocator friendset;

};

set string, lessstring, allocator OurFriends::friendset;

int main()

{

string Pooh_friends[] = { "Пятачок", "Тигра", "Иа-Иа" };

string more_friends[] = { "Квазимодо", "Чип", "Пятачок" };

liststring,allocator lf( more_friends, more_friends+3 );

// заполнить список друзей Пуха

OurFriends::FriendSet( Pooh_friends, 3 );

liststring,allocator::iterator our_mutual_friend;

our_mutual_friend =

find_if( lf.begin(), lf.end(), OurFriends());

// печатается:

// Представьте-ка, наш друг Пятачок - также друг Пуха.

if ( our_mutual_friend != lf.end() )

cout "Представьте-ка, наш друг "

*our_mutual_friend

" также друг Пуха. ";

return 0;

}