C++ для начинающих.

Алгоритм search().

Template class ForwardIterator1, class ForwardIterator2.

ForwardIterator.

Search( ForwardIterator1 first1, ForwardIterator1 last1,

ForwardIterator2 first2, ForwardIterator2 last2 );

Template class ForwardIterator1, class ForwardIterator2,

Class BinaryPredicate.

ForwardIterator.

Search( ForwardIterator1 first1, ForwardIterator1 last1,

ForwardIterator2 first2, ForwardIterator2 last2,

BinaryPredicate pred );

Если даны два диапазона, то search() возвращает итератор, указывающий на первую позицию в диапазоне [first1,last1), начиная с которой второй диапазон входит как подпоследовательность. Если подпоследовательность не найдена, возвращается last1. Например, в слове Mississippi подпоследовательность iss встречается дважды, и search() возвращает итератор, указывающий на начало первого вхождения. В первом варианте для сравнения элементов используется оператор равенства, во втором - указанная программистом операция сравнения.

#include algorithm.

#include vector.

#include iostream.h.

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

Ожидаем найти подстроку 'ate': a t e.

Ожидаем найти подстроку 'vat': v a t.

*/

Int main().

{

Ostream_iterator char ofile( cout, " " );

Char str[ 25 ] = "a fine and private place";

Char substr[] = "ate";

Char *found_str = search(str,str+25,substr,substr+3);

Cout "Ожидаем найти подстроку 'ate': ";

Copy( found_str, found_str+3, ofile ); cout '\n';

Vector char, allocator vec( str, str+24 );

Vector char, allocator subvec(3);

Subvec[0]='v'; subvec[1]='a'; subvec[2]='t';

Vector char, allocator ::iterator iter;

Iter = search( vec.begin(), vec.end(),

Subvec.begin(), subvec.end(),

Equal_to char () );

Cout "Ожидаем найти подстроку 'vat': ";

Copy( iter, iter+3, ofile ); cout '\n';

}