Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ для начинающих (Стенли Липпман) 3-е хххх.pdf
Скачиваний:
86
Добавлен:
30.05.2015
Размер:
5.92 Mб
Скачать

С++ для начинающих

1101

}

template< class InputIterator, class T > InputIterator

find( InputIterator first,

Алгоритм find()

InputIterator last, const T &value );

Элементы из диапазона, ограниченного парой итераторов [first,last), сравниваются со значением value с помощью оператора равенства, определенного для типа элементов контейнера. Как только соответствие найдено, поиск прекращается. find() возвращает итератор типа InputIterator, указывающий на найденный

#include <algorithm> #include <iostream.h> #include <list> #include <string>

int main()

{

int array[ 17 ] = { 7,3,3,7,6,5,8,7,2,1,3,8,7,3,8,4,3 };

int elem = array[ 9 ]; int *found_it;

found_it = find( &array[0], &array[17], elem );

// печатается: поиск первого вхождения 1 найдено!

cout << "поиск первого вхождения "

<<elem << "\t"

<<( found_it ? "найдено!\n" : "не найдено!\n" );

string beethoven[] = {

"Sonata31", "Sonata32", "Quartet14", "Quartet15", "Archduke", "Symphony7" };

string s_elem( beethoven[ 1 ] );

list< string, allocator > slist( beethoven, beethoven+6 ); list< string, allocator >::iterator iter;

iter = find( slist.begin(), slist.end(), s_elem );

// печатается: поиск первого вхождения Sonata32 найдено!

cout << "поиск первого вхождения "

<<s_elem << "\t"

<<( found_it ? "найдено!\n" : "не найдено!\n" );

элемент; в противном случае возвращается last.

}

С++ для начинающих

1102

template< class InputIterator, class Predicate > InputIterator

find_if( InputIterator first,

Алгоритм find_if()

InputIterator last, Predicate pred );

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

С++ для начинающих

1103

#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, less<string>, allocator > friendset;

};

set< string, less<string>, allocator > OurFriends::friendset;

int main()

{

string Pooh_friends[] = { "Пятачок", "Тигра", "Иа-Иа" }; string more_friends[] = { "Квазимодо", "Чип", "Пятачок" }; list<string,allocator> lf( more_friends, more_friends+3 );

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

OurFriends::FriendSet( Pooh_friends, 3 );

list<string,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

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

return 0;

}

С++ для начинающих

1104

template< class ForwardIterator1, class ForwardIterator2 > ForwardIterator1

find_end( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2 );

template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >

ForwardIterator1

find_end( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,

Алгоритм find_end()

BinaryPredicate pred );

В последовательности, ограниченной итераторами [first1,last1), ведется поиск последнего вхождения последовательности, ограниченной парой [first2,last2). Например, если первая последовательность это Mississippi, а вторая ss, то find_end() возвращает итератор, указывающий на первую s во втором вхождении ss. Если вторая последовательность не входит в первую, то возвращается last1. В первом варианте используется оператор равенства, определенный для типа элементов контейнера, а во втором бинарный предикат, переданный пользователем.