inner_product
abs
TOC
Collapse the table of content
Expand the table of content
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. ArchiveDisclaimer

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>

Show:
© 2016 Microsoft