Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
abs
Expand Minimize
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here.

inner_product (STL Samples) 

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
   )

NoteNote

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.

// 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;

}

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

Header: <numeric>

Community Additions

ADD
Show:
© 2015 Microsoft