====== Algorytm mismatch ====== 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. ===== Nagłówek dla algorytmu ===== #include ===== Opis algorytmu ===== **__Definicja algorytmu__** template pair mismatch(IteratorWejsciowy1 pierwszy1, IteratorWejsciowy2 ostatni1, IteratorWejsciowy2 pierwszy2); template pair mismatch(IteratorWejsciowy1 pierwszy1, IteratorWejsciowy2 ostatni1, IteratorWejsciowy2 pierwszy2, PredykatDwuargumentowy pred_dwuargumentowy); **__Parametry algorytmu__** * **pierwszy1, ostatni1** - iteratory wskazujące na zakres danych wejściowych pierwszych. Przetwarzaniu podlegają elementy z zakresu [pierwszy1, ostatni1) * **pierwszy2** - iterator wskazujący na pozycje danych wejściowych drugich. Koniec tego zakresu jest wyliczany na podstawie długości zakresu [pierwszy1, ostatni1). Należy pamiętać aby za elementem peirwszy2 istniało jeszcze co najmniej tyle elementów, ile jest pomiędzy pierwszy1 i ostatni1 * **ped_dwuargumentowy** - predykat do spełnienia W przypadku, gdy nie zostaną znalezione elementy, które do siebie nie pasują, wartością zwracaną jest **pair**. __ **Przykład użycia algorytmu mismatch bez predykatu.**__ vector wektor1; list 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::iterator, list::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<<")"< __**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 para_tablica; pair 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<<")"< ===== Przykład programu wykorzystujący algorytm mismatch ===== {{mismatch.cpp}} //[[mkrotewicz@gmail.com|Michał Krotewicz 6SST]]//