subvec.begin(), subvec.end(),
equal_toint() );
assert( found_it2 == ivec.begin()+10 );
cout "ok: find_end правильно вернула начало "
"последнего вхождения последовательности: 3,7,6!\n";
}
Алгоритм find_first_of()
template class ForwardIterator1, class ForwardIterator2
ForwardIterator1
find_first_of( ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator2 last2 );
template class ForwardIterator1, class ForwardIterator2,
class BinaryPredicate
ForwardIterator1
find_first_of( ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator2 last2,
BinaryPredicate pred );
Последовательность, ограниченная парой [first2,last2), содержит элементы, поиск которых ведется в последовательности, ограниченной итераторами [first1,last1). Допустим, нужно найти первую гласную в последовательности символов synesthesia. Для этого определим вторую последовательность как aeiou. find_first_of() возвращает итератор, указывающий на первое вхождение любого элемента последовательности гласных букв, в данном случае e. Если же первая последовательность не содержит ни одного элемента из второй, то возвращается last1. В первом варианте используется оператор равенства, определенный для типа элементов контейнера, а во втором - бинарный предикат pred.
#include algorithm
#include vector
#include string
#include iostream.h
int main()
{
string s_array[] = { "Ee", "eE", "ee", "Oo", "oo", "ee" };
// возвращает первое вхождение "ee" -- &s_array[2]
string to_find[] = { "oo", "gg", "ee" };
string *found_it =
find_first_of( s_array, s_array+6,
to_find, to_find+3 );
// печатается:
// найдено: ee
// &s_array[2]: 0x7fff2dac
// &found_it: 0x7fff2dac
if ( found_it != &s_array[6] )
cout "найдено: " *found_it "\n\t"
"&s_array[2]:\t" && &s_array[2] && "\n\t"
"&found_it:\t" && found_it && "\n\n";
vector string, allocator svec( s_array, s_array+6);
vector string, allocator svec_find( to_find, to_find+2 );
// возвращает вхождение "oo" -- svec.end()-2
vector string, allocator ::iterator found_it2;
found_it2 = find_first_of(
svec.begin(), svec.end(),
svec_find.begin(), svec_find.end(),
equal_tostring() );
// печатает:
// тоже найдено: oo
// &svec.end()-2: 0x100067b0
// &found_it2: 0x100067b0
if ( found_it2 != svec.end() )
cout "тоже найдено: " *found_it2 "\n\t"
"&svec.end()-2:\t" && svec.end()-2 && "\n\t"
"&found_it2:\t" && found_it2 && "\n";
}
Алгоритм for_each()
template class InputIterator, class Function
Function
for_each( InputIterator first,
InputIterator last, Function func );
for_each() применяет объект-функцию func к каждому элементу в диапазоне [first,last). func не может изменять элементы, поскольку итератор записи не гарантирует поддержки присваивания. Если же модификация необходима, следует воспользоваться алгоритмом transform(). func может возвращать значение, но оно игнорируется.
#include algorithm
#include vector
#include iostream.h
template class Type