inner_product |
C++ Library |
template<class InputIterator1, class InputIterator2, class T> inline T inner_product(InputIterator first, InputIterator last, InputIterator first2, T init)
template<class InputIterator1, class InputIterator2, class T, class BinOp1, class BinOp2> inline T inner_product(InputIterator1 first, InputIterator1 last, InputIterator2 first2, T init, BinOp1 binary_op1, BinOp2 binary_op2)
inner_product adds the product of the input sequences to a total.
inner_product computes its result by initializing the accumulator acc with init and then modifying it with: acc = acc + (*i1) * (*i2) - or - acc = binary_op1(acc, binary_op2(*i1, *i2)) for every iterator i1 in the range [first, last) and iterator i2 in the range [first2, first2 + (last - first)) in order.
#include <iostream> #include <numeric> #include <functional> #include <vector> #include <iterator> using namespace std; typedef vector < float > FloatArray; typedef ostream_iterator < float, char, char_traits<char> > FloatOstreamIt; void main () { FloatOstreamIt itOstream(cout," "); // Initialize the arrays FloatArray rgF1, rgF2; for (int i=1; i<=5; i++) { rgF1.push_back(i); rgF2.push_back(i*i); }; // Print the arrays cout << "Array 1: "; copy(rgF1.begin(),rgF1.end(),itOstream); cout << endl; cout << "Array 2: "; copy(rgF2.begin(),rgF2.end(),itOstream); cout << endl; // Compute the inner_product of the arrays. This is the // sum of the products (S.O.P) of the corresponding elements float ip1 = inner_product(rgF1.begin(),rgF1.end(),rgF2.begin(),0); cout << "The inner product (S.O.P) of Array1 and Array2 is " << ip1 << endl; // Compute the inner_product of the arrays. This is the // product of the sums (P.O.S.) of the corresponding elements float ip2 = inner_product(rgF1.begin(),rgF1.end(),rgF2.begin(),1, multiplies<float>(),plus<float>()); cout << "The inner product (P.O.S.) of Array1 and Array2 is " << ip2 << endl; }
Array 1: 1 2 3 4 5 Array 2: 1 4 9 16 25 The inner product (S.O.P) of Array1 and Array2 is 225 The inner product (P.O.S.) of Array1 and Array2 is 86400