int ia_result[24];
vector int, allocator vec_result(vec1.size()+vec2.size());
sort( ia, ia +12 );
sort( ia2, ia2+12 );
// печатается:
// 10 12 15 16 17 19 20 21 22 23 26 27 29 35
// 39 40 41 44 51 54 62 65 71 74
merge( ia, ia+12, ia2, ia2+12, ia_result );
for_each( ia_result, ia_result+24, pfi ); cout "\n\n";
sort( vec1.begin(), vec1.end(), greaterint() );
sort( vec2.begin(), vec2.end(), greaterint() );
merge( vec1.begin(), vec1.end(),
vec2.begin(), vec2.end(),
vec_result.begin(), greaterint() );
// печатается: 74 71 65 62 54 51 44 41 40 39 35 29 27 26 23 22
// 21 20 19 17 16 15 12 10
for_each( vec_result.begin(), vec_result.end(), pfi );
cout "\n\n";
}
Алгоритм mismatch()
template class InputIterator1, class InputIterator2
pairInputIterator1, InputIterator2
mismatch( InputIterator1 first,
InputIterator1 last, InputIterator2 first2 );
template class InputIterator1, class InputIterator2,
class BinaryPredicate
pairInputIterator1, InputIterator2
mismatch( InputIterator1 first, InputIterator1 last,
InputIterator2 first2, BinaryPredicate pred );
mismatch() сравнивает две последовательности и находит первую позицию, где элементы различны. Возвращается пара итераторов, каждый из которых указывает на эту позицию в соответствующей последовательности. Если все элементы одинаковы, то каждый итератор в паре указывает на элемент last в своем контейнере. Так, если даны последовательности meet и meat, то оба итератора указывают на третий элемент. В первом варианте для сравнения элементов применяется оператор равенства, а во втором - операция сравнения, заданная пользователем. Если вторая последовательность длиннее первой, "лишние" элементы игнорируются; если же она короче, то поведение программы не определено.
#include algorithm
#include list
#include utility
#include iostream.h
class equal_and_odd{
public:
bool operator()( int ival1, int ival2 )
{
// оба значения равны друг другу?
// оба равны нулю? оба нечетны?
return ( ival1 == ival2 &&
( ival1 == 0 || ival1%2 ));
}
};
int main()
{
int ia[] = { 0,1,1,2,3,5,8,13 };
int ia2[] = { 0,1,1,2,4,6,10 };
pairint*,int* pair_ia = mismatch( ia, ia+7, ia2 );
// печатается: первая пара неодинаковых: ia: 3 и ia2: 4
cout "первая пара неодинаковых: ia: "
*pair_ia.first " и ia2: "
*pair_ia.second endl;
listint,allocator ilist( ia, ia+7 );
listint,allocator ilist2( ia2, ia2+7 );
typedef listint,allocator::iterator iter;
pairiter,iter pair_ilist =
mismatch( ilist.begin(), ilist.end(),
ilist2.begin(), equal_and_odd() );
// печатается: первая пара неодинаковых: либо не равны, либо не нечетны:
// ilist: 2 и ilist2: 2
cout "первая пара неодинаковых: либо не равны, "
"либо не нечетны: \n\tilist: "
*pair_ilist.first " и ilist2: "
*pair_ilist.second endl;
}
Алгоритм next_permutation()
template class BidirectionalIterator
bool