Narzędzia użytkownika

Narzędzia witryny


mismatch

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Next revision
Previous revision
mismatch [2009/03/28 13:54]
mkrotewicz utworzono
mismatch [2009/04/28 14:26] (aktualna)
mkrotewicz
Linia 1: Linia 1:
 ====== Algorytm mismatch ====== ====== 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 =====
 +<code cpp> #include <​algorithm>​ </​code>​
 +
 + ===== Opis algorytmu =====
 +
 +**__Definicja algorytmu__**
 +
 +<code cpp>
 +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);​
 +</​code>​
 +
 +**__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<​ostatni1,​ pierwszy2 + (ostatni1 - pierwszy1)>​**.
 +
 +
 +
 +__
 +**Przykład użycia algorytmu mismatch bez predykatu.**__
 +<code cpp>
 +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)
 +</​code>​
 +
 +
 +__**Przykład użycia algorytmu mismatch z predykatem.**__
 +<code cpp>
 +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;
 +}
 +</​code>​
 +
 +===== Przykład programu wykorzystujący algorytm mismatch =====
 +{{mismatch.cpp}}
 +
 + //​[[mkrotewicz@gmail.com|Michał Krotewicz 6SST]]//
mismatch.1238244872.txt.gz · ostatnio zmienione: 2009/03/28 13:54 przez mkrotewicz