Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
inner_product [2008/12/12 21:22] joanna |
inner_product [2008/12/12 21:33] joanna |
||
---|---|---|---|
Linia 59: | Linia 59: | ||
===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. //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''. | ||