Алгоритм mismatch()

Алгоритм 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 "первая пара неодинаковых: либо не равны, "

"либо не нечетны: ilist: "

*pair_ilist.first " и ilist2: "

*pair_ilist.second endl;

}