====== 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]]//