Algorytm mismatch() porównuje dwie sekwencje w celu znalezienia pierwszego niepasującego elementu. Algorytm ten umożliwia korzystanie z operatora == albo z dwuargumentowego predyktu. Zaliczany jest do algorytmów niemodyfikujących.
#include <algorithm>
Definicja algorytmu
template <class IteratorWejsciowy1, class IteratorWejsciowy2> pair<IteratorWejsciwoy1, IteratorWejsciowy2> mismatch(IteratorWejsciowy1 pierwszy1, IteratorWejsciowy2 ostatni1, IteratorWejsciowy2 pierwszy2); template <class IteratorWejsciowy1, class IteratorWejsciowy2, class PredykatDwuargumentowy> pair<IteratorWejsciwoy1, IteratorWejsciowy2> mismatch(IteratorWejsciowy1 pierwszy1, IteratorWejsciowy2 ostatni1, IteratorWejsciowy2 pierwszy2, PredykatDwuargumentowy pred_dwuargumentowy);
Parametry algorytmu
W przypadku, gdy nie zostaną znalezione elementy, które do siebie nie pasują, wartością zwracaną jest pair<ostatni1, pierwszy2 + (ostatni1 - pierwszy1)>.
Przykład użycia algorytmu mismatch bez predykatu.
vector <int> wektor1; list <int> lista1; for(int i=0; i<7 ; i++) wektor1.push_back(i); //wektor1 [0,1,2, 3,4,5,6] for(int i=0; i<8; i++){ //lista1 [0,1,2,982,4,5,6,7] if(i==4) lista1.push_back(982); else lista1.push_back(i); } pair<vector<int>::iterator, list<int>::iterator> para_WektorLista; para_WektorLista = mismatch(wektor1.begin(), wektor1.end(), lista1.begin()); //znajduje pary niezgodne cout<<"Niezgodna para dla wektora1 i listy1: ( "<<*para_WektorLista.first<<", "<<*para_WektorLista.second<<")"<<endl; //Niezgodna para dla wektora1 i listy1: (3,982)
Przykład użycia algorytmu mismatch z predykatem.
class rowne_parzyste{ public: bool operator ()(int ciag1, int ciag2){ //pierwszy predytkt //czy obie wartości są rowne i parzyste return ( ciag1 == ciag2 || ciag1%2 ==0) ? true : false; } }; bool nierowne_nieparzyste(int ciag1, int ciag2){ //drugi predykt return ( ciag1 != ciag2 || (ciag1%2==1 && ciag2%2==1)) ? true : false; } int main(){ int tablica1[] = {1,2,3,4,67,6,7,8,9,10}; int tablica2[] = {1,2,3,4, 5,6,7,8,9,10,11,12}; int rozmiar_tablicy1= sizeof(tablica1)/sizeof(int); int rozmiar_tablicy2= sizeof(tablica2)/sizeof(int); pair<int*,int*> para_tablica; pair<int*,int*> para_tablica; //zastsowanie mismatch z pierwszym predyktem para_tablica = mismatch(tablica1, tablica1+rozmiar_tablicy1, tablica2, rowne_parzyste()); //znajduje pary, ktore nie spelniaja predyktu cout<<"Nierowna i nieparzysta para dla tablicy1 i tablicy2: ( "<<*para_tablica.first<<", "<<*para_tablica.second<<")"<<endl; //Nierowna i nieparzysta para dla tablicy1 i tablicy2: (67,5) //zastosowanie mismatch z drugi predyktem para_tablica = mismatch(tablica1, tablica1+rozmiar_tablicy1, tablica2, nierowne_nieparzyste); //znajduje pary, ktore nie spelniaja predyktu cout<<"Rowna i parzysta para dla tablicy1 i tablicy2: ( "<<*para_tablica.first<<", "<<*para_tablica.second<<")"<<endl; //Rowna i parzysta para dla tablicy1 i tablicy2: (2,2) return 0; }