Алгоритм 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'; |
}