Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Illustrates how to use the inner_product Standard Template Library (STL) function in Visual C++.
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
)
Remarks
Note
The class/parameter names in the prototype do not match the version in the header file. Some have been modified to improve readability.
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.
Example
// inner_product.cpp
// compile with: /EHsc
//
// 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.
///////////////////////////////////////////////////////////////////////
#include <iostream>
#include <numeric>
#include <functional>
#include <vector>
#include <iterator>
using namespace std;
typedef vector < int > intArray;
typedef ostream_iterator < int, char, char_traits<char> >
FloatOstreamIt;
int main ()
{
FloatOstreamIt itOstream(cout," ");
// Initialize the arrays
intArray 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
int 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
int ip2 = inner_product(rgF1.begin(),rgF1.end(),rgF2.begin(),1,
multiplies<int>(),plus<int>());
cout << "The inner product (P.O.S.) of Array1 and Array2 is "
<< ip2
<< endl;
}
Output
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
Requirements
Header: <numeric>