STL Sample for the inner_product FunctionLast reviewed: October 9, 1997Article ID: Q157392 |
The information in this article applies to:
SUMMARYThe sample code below illustrates how to use the inner_product STL function in Visual C++.
MORE INFORMATION
Required Header
#include <numeric> #include <functional> Prototype
template<class InputIterator1, class InputIterator2, class _TYPE> inline _TYPE inner_product(InputIterator first, InputIterator last, InputIterator first2, _TYPE init) template<class InputIterator1, class InputIterator2, class _TYPE, class BinaryOperator1, class BinaryOperator2> inline _TYPE inner_product(InputIterator1 first, InputIterator1 last, InputIterator2 first2, _TYPE init, BinaryOperator1 binary_op1, BinaryOperator2 binary_op2)NOTE: The class/parameter names in the prototype may not match the version in the header file. Some have been modified to improve readability.
Descriptioninner_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.
Sample Code
/////////////////////////////////////////////////////////////////////// // // Compile options needed: /GX // // inner_product.cpp : Demonstrates the use of inner_product(). // // Description of // inner_product(first,last,first2,init) // inner_product(first,last,first2,init,binary_op1,binary_op2): // // Computes its result by initializing the accumulator acc with init // acc = 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. // // Written by Shaun Miller // of Microsoft Product Support Services, Languages Developer Support. // Copyright (c) 1996 Microsoft Corporation. All rights reserved. /////////////////////////////////////////////////////////////////////// #include <iostream> #include <numeric> #include <functional> #include <vector> #include <iterator>typedef vector < float, allocator < 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 correspondingelements 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 correspondingelements float ip2 = inner_product(rgF1.begin(),rgF1.end(),rgF2.begin(),1, times<float>(),plus<float>()); cout << "The inner product (P.O.S.) of Array1 and Array2 is " << ip2 << endl;} Program Output is: 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
REFERENCESVisual C++ Books On Line: Visual C++ Books:C/C++:Standard C++ Library Reference.
|
Additional query words: STL STLSample inner_product
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |