С++ для начинающих

       

Алгоритм mismatch()


template< class InputIterator1, class InputIterator2 >

pair<InputIterator1, InputIterator2>

mismatch( InputIterator1 first,

          InputIterator1 last, InputIterator2 first2 );

template< class InputIterator1, class InputIterator2,

          class BinaryPredicate >

pair<InputIterator1, 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   };

                 

           pair<int*,int*> pair_ia = mismatch( ia, ia+7, ia2 );

     // печатается: первая пара неодинаковых: ia: 3 и ia2: 4

     cout << "первая пара неодинаковых: ia: "

                << *pair_ia.first << " и ia2: "

          << *pair_ia.second << endl;

                 

           list<int,allocator> ilist(  ia,  ia+7  );

           list<int,allocator> ilist2( ia2, ia2+7 );

                 

           typedef list<int,allocator>::iterator iter;

           pair<iter,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;

}



Содержание раздела