Różnice między wybraną wersją a wersją aktualną.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| 
                    inner_product [2008/12/12 21:22] joanna zmiany w formatowaniui dodane linki  | 
                
                    inner_product [2008/12/12 21:42] (aktualna) joanna poprawka listy  | 
            ||
|---|---|---|---|
| Linia 19: | Linia 19: | ||
| \\ | \\ | ||
| - | =====Wariant pierwszy, loczyn skalarny euklidesowy===== | + | =====Wariant pierwszy - iloczyn skalarny euklidesowy===== | 
| Prostsza z deklaracji ''inner_product'' udostępnia inerfejs do obliczenia zwykłego iloczynu skalarnego, znanego z geometrii euklidesowej. | Prostsza z deklaracji ''inner_product'' udostępnia inerfejs do obliczenia zwykłego iloczynu skalarnego, znanego z geometrii euklidesowej. | ||
| ===Parametery=== | ===Parametery=== | ||
| - | * //first1//  iterator, który wskazuje na początek kolekcji pierwszej\\ | + | * //first1//  iterator, który wskazuje na początek kolekcji pierwszej\\ | 
| - | * //last1//  iterator, który wskazuje na koniec kolekcji pierwszej\\ | + | * //last1//  iterator, który wskazuje na koniec kolekcji pierwszej\\ | 
| - | * //first2//  iterator, który wskazuje na początek kolekcji drugiej\\ | + | * //first2//  iterator, który wskazuje na początek kolekcji drugiej\\ | 
| - | * //init//  wartość początkowa wyniku\\ | + | * //init//  wartość początkowa wyniku\\ | 
| ===Działanie=== | ===Działanie=== | ||
| Linia 55: | Linia 55: | ||
| =====Wariant drugi - iloczyn skalarny zdefinowany przez użytkownika===== | =====Wariant drugi - iloczyn skalarny zdefinowany przez użytkownika===== | ||
| Druga z deklaracji ''inner_product'' jest poszerzona o dwa parametry:\\ | Druga z deklaracji ''inner_product'' jest poszerzona o dwa parametry:\\ | ||
| - | * //binary_op1//  operacja dwuargumentowa, która zastąpi dodawanie\\ | + | * //binary_op1//  operacja dwuargumentowa, która zastąpi dodawanie\\ | 
| - | * //binary_op2//  operacja dwuargumentowa, która zastąpi mnożenie\\ | + | * //binary_op2//  operacja dwuargumentowa, która zastąpi mnożenie\\ | 
| ===Działanie=== | ===Działanie=== | ||
| - | Funkcja inicjalizuje akumulator //a// = //init//, po czym oblicza //a// = //binary_op1//(//a// , //binary_op2//( (*//it1//) ,(*//it2//))) dla podanego zekresu kolekcji . Zakresy iteratorów są takie same jak w pierwszym przypadku ''inner_product''. //binary_op1// i //binary_op2// muszą być funkcjami lub obiektami funkcyjnymi.  | + | Funkcja inicjalizuje akumulator //a// = //init//, po czym oblicza //a// = //binary_op1//( //a// , //binary_op2//( (*//it1//) ,(*//it2//) ) ) dla podanego zekresu kolekcji. Zakresy iteratorów są takie same jak w pierwszym przypadku. \\ | 
| + | //binary_op1// i //binary_op2// muszą być funkcjami lub obiektami funkcyjnymi.  | ||
| ===Zdefiniowanie operacji do inner_product=== | ===Zdefiniowanie operacji do inner_product=== | ||
| - | Aby wykorzystać ''inner_product'' do obliczania własnego iloczynu skalarnego należy zdefiniować własne operacje //binary_op1// i //binary_op2//. Najłatwiej to zrobić posługując się szablonem [[binary_operation]]. W przykładzie w pliku [[stl_algorytmy:inner_product.cpp | inner_product.cpp]] zdefiniowana jest funkcja ''multiplies_conj'', która mnoży liczbę zespoloną [[ liczby zespolone <complex> | complex]] przez liczbę sprzężoną z drugą liczbą.\\ | + | Aby wykorzystać ''inner_product'' do obliczania własnego iloczynu skalarnego należy zdefiniować własne operacje //binary_op1// i //binary_op2//. Najłatwiej to zrobić posługując się szablonem [[binary_operation]]. W przykładzie w pliku {{stl_algorytmy:inner_product.cpp | inner_product.cpp}} zdefiniowana jest funkcja ''multiplies_conj'', która mnoży liczbę zespoloną [[ liczby zespolone <complex> | complex]] przez liczbę sprzężoną z drugą liczbą.\\ | 
| <code cpp> | <code cpp> | ||
| Linia 96: | Linia 97: | ||
| plus<ComplexInt>(), multiplies_conj<ComplexInt>());  //zamiast zwykłego mnożenia - mnożenie przez liczbę sprzężoną | plus<ComplexInt>(), multiplies_conj<ComplexInt>());  //zamiast zwykłego mnożenia - mnożenie przez liczbę sprzężoną | ||
| - | cout<<"Iloczyn skalarny = "<<complexInner<<endl; //Iloczyn skalarny = (11,4) | + | cout<<"Iloczyn skalarny = "<<complexInner<<endl; //Iloczyn skalarny = (11,4) | 
| </code> | </code> | ||
| ====Zastosowanie inner_product==== | ====Zastosowanie inner_product==== | ||
| Możliwych zastosowań ''inner_product'' można wymyśleć tyle, ile jest różnych przestrzeni z działaniem iloczynu skalarnego. Wiele problemów, niekoniecznie matematycznych, można wyrazić w postaci obliczania iloczynu skalarnego. Łatwo na przykład zastosować ten sposób obliczeń do porównywania ciągów znaków, do obliczania dopasowania do wzorca. Operacja iloczynu skalarnego jest dość prosta i szybka, dlatego warto z niej skorzystać w swoich projektach. | Możliwych zastosowań ''inner_product'' można wymyśleć tyle, ile jest różnych przestrzeni z działaniem iloczynu skalarnego. Wiele problemów, niekoniecznie matematycznych, można wyrazić w postaci obliczania iloczynu skalarnego. Łatwo na przykład zastosować ten sposób obliczeń do porównywania ciągów znaków, do obliczania dopasowania do wzorca. Operacja iloczynu skalarnego jest dość prosta i szybka, dlatego warto z niej skorzystać w swoich projektach. | ||
| + | |||
| + | ====Przykładowy kod==== | ||
| + | Fragmenty kodu użyte w artykule znajdują się w pliku {{stl_algorytmy:inner_product.cpp | inner_product.cpp}}. Tam też można znaleźć przykład, jak policzyć kąt pomiędzy wektorami przy pomocy funkcji ''inner_product''.  | ||