inner_product (STL Samples)
Illustre comment utiliser la fonction de bibliothèque de types (STL) Standard d' inner_product dans 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
)
Notes
[!REMARQUE]
Les noms de classes/paramètre dans le prototype ne correspondent pas à la version du fichier d'en-tête.certains ont été modifiés pour améliorer la lisibilité.
inner_product calcule son résultat en initialisant l'accumulateur acc avec Init puis en le redéfinissant avec : acc = acc + (*i1) * (*i2) - ou - acc = Binary_Op1(acc, Binary_Op2(*i1, *i2)) pour chaque itérateur i1dans la plage [First, Last) et itérateur i2dans la plage [First2, First2 + (Last - First)) dans l'ordre.
Exemple
// 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;
}
Sortie
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
Configuration requise
en-tête : <numeric>