Поделиться через


inner_product (STL Samples)

Демонстрируется использование inner_product Стандартная функция библиотеки стандартных шаблонов (STL) в 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
   )

Заметки

ПримечаниеПримечание

Имена класса и параметра в прототипе не соответствует версии в файле заголовка.Некоторые были изменены для улучшения удобочитаемости.

inner_product вычисляет его результат путем инициализации аккумулятор acc с Инициализация затем изменение его с: acc = acc + (*i1) * (*i2) - или - acc = Binary_Op1(acc" Binary_Op2(*i1 *iдля каждого итератора 2)) iв диапазоне [1First" Last) и итератор iв диапазоне [2First2" First2 + (Last - First)) в следующем порядке.

Пример

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

Требования

заголовок:<numeric>

См. также

Основные понятия

Образец библиотеки стандартных шаблонов