Freigeben über


inner_product

Berechnet die Summe des Produkts elementweisen zwischen zwei Bereichen und einem angegebenen Anfangswert hinzu oder berechnet das Ergebnis einer verallgemeinerten Prozedur, in der die Summen- und Produktbinären operationen durch andere angegebene binäre Operationen ersetzt werden.

template<class InputIterator1, class InputIterator2, class Type>
   Type inner_product(
      InputIterator1 _First1, 
      InputIterator1 _Last1,
      InputIterator2 _First2, 
      Type _Val
   );

template<class InputIterator1, class InputIterator2, class Type,
   class BinaryOperation1, class BinaryOperation2>
   Type inner_product(
      InputIterator1 _First1, 
      InputIterator1 _Last1,
      InputIterator2 _First2, 
      Type _Val, 
      BinaryOperation1 _Binary_op1, 
      BinaryOperation2 _Binary_op2
   );

Parameter

  • _First1
    Ein Eingabeiterator, der das erste Element im ersten Bereich anspricht, dessen Skalarprodukt oder generalisiertes Skalarprodukt mit dem zweiten Bereich, berechnet werden ist.

  • _Last1
    Ein Eingabeiterator, der das letzte Element im ersten Bereich anspricht, dessen Skalarprodukt oder generalisiertes Skalarprodukt mit dem zweiten Bereich, berechnet werden ist.

  • _First2
    Ein Eingabeiterator, der das erste Element im zweiten Bereich anspricht, dessen Skalarprodukt oder generalisiertes Skalarprodukt mit dem ersten Bereich, berechnet werden ist.

  • _Val
    Ein Anfangswert, zu dem das Skalarprodukt oder das allgemeine Skalarprodukt zwischen den Bereichen hinzugefügt werden soll.

  • _Binary_op1
    Die binäre Operation, die den Skalarproduktvorgang der Summe ersetzt, auf den elementweisen Produkten in der Verallgemeinerung des Skalarprodukts.

  • _Binary_op2
    Die binäre Operation, dessen elementweisen Vorgang des Skalarprodukts ersetzt, multiplizieren in der Verallgemeinerung des Skalarprodukts.

Rückgabewert

Die erste Memberfunktion gibt die Summe der elementweisen Produkte zurück und fügt ihr den angegebenen Anfangswert hinzu.Daher für Wertebereiche ai und Bi, gibt sie zurück:

_Val + ( einen1 * *B)*1 + ( a2 + *b)*2 *

durch _Val mit _Val iterativ ersetzen + (*a I * *b)I.

Im zweiten Memberfunktionsrückgaben:

     _Val _Binary_op1 (ein 1*_Binary_op2b1 ) _Binary_op1 (ein 2_Binary_op2b*2 ) _Binary_op1

durch _Val mit _Val _Binary_op1 iterativ ersetzen (*a I _Binary_op2 *b)I.

Hinweise

Der Anfangswert wird sichergestellt, dass es ein klar definiertes Ergebnis gibt, wenn der Bereich leer ist, in diesem Fall _Val zurückgegeben wird.Die binäre Operationen, müssen nicht vereinigend oder auswechselbar zu sein.Der Bereich muss gültig sein und die Komplexität ist mit der Größe des Bereichs linear.Der Rückgabetyp des binären Operators muss auf Typ konvertierbar sein, Finalisierung während der Iteration sicherzustellen.

Beispiel

// numeric_inner_prod.cpp
// compile with: /EHsc
#include <vector>
#include <list>
#include <numeric>
#include <functional>
#include <iostream>

int main()
{
   using namespace std;

   vector <int> v1, v2(7), v3(7);
   vector <int>::iterator iter1, iter2, iter3;

   int i;
   for (i = 1; i <= 7; i++)
   {
      v1.push_back(i);
   }

   cout << "The original vector v1 is:\n ( " ;
   for (iter1 = v1.begin(); iter1 != v1.end(); iter1++)
      cout << *iter1 << " ";
   cout << ")." << endl;

   list <int> l1, l2(7);
   list <int>::iterator lIter1, lIter2;

   int t;
   for (t = 1; t <= 7; t++)
   {
      l1.push_back(t);
   }

   cout << "The original list l1 is:\n ( " ;
   for (lIter1 = l1.begin(); lIter1 != l1.end(); lIter1++)
      cout << *lIter1 << " ";
   cout << ")." << endl;

   // The first member function for the inner product
   int inprod;
   inprod = inner_product(v1.begin(), v1.end(), l1.begin(), 0);

   cout << "The inner_product of the vector v1 and the list l1 is: "
        << inprod << "." << endl;

   // Constructing a vector of partial inner_products between v1 & l1
   int j = 0, parinprod;
   for (iter1 = v1.begin(); iter1 != v1.end(); iter1++) {
      parinprod = inner_product(v1.begin(), iter1 + 1, l1.begin(), 0);
      v2[j] = parinprod;
      j++;
   }

   cout << "Vector of partial inner_products between v1 & l1 is:\n ( " ;
   for (iter2 = v2.begin(); iter2 != v2.end(); iter2++)
      cout << *iter2 << " ";
   cout << ")." << endl << endl;

   // The second member function used to compute
   // the product of the element-wise sums
   int inprod2;
   inprod2 = inner_product (v1.begin(), v1.end(),
      l1.begin(), 1, multiplies<int>(), plus<int>());

   cout << "The sum of the element-wise products of v1 and l1 is: "
        << inprod2 << "." << endl;

   // Constructing a vector of partial sums of element-wise products
   int k = 0, parinprod2;
   for (iter1 = v1.begin(); iter1 != v1.end(); iter1++)
   {
      parinprod2 =
         inner_product(v1.begin(), iter1 + 1, l1.begin(), 1,
         multiplies<int>(), plus<int>());
      v3[k] = parinprod2;
      k++;
   }

   cout << "Vector of partial sums of element-wise products is:\n ( " ;
   for (iter3 = v3.begin(); iter3 != v3.end(); iter3++)
      cout << *iter3 << " ";
   cout << ")." << endl << endl;
}

Output

The original vector v1 is:
 ( 1 2 3 4 5 6 7 ).
The original list l1 is:
 ( 1 2 3 4 5 6 7 ).
The inner_product of the vector v1 and the list l1 is: 140.
Vector of partial inner_products between v1 & l1 is:
 ( 1 5 14 30 55 91 140 ).

The sum of the element-wise products of v1 and l1 is: 645120.
Vector of partial sums of element-wise products is:
 ( 2 8 48 384 3840 46080 645120 ).

Anforderungen

Header: <numeric>

Namespace: std

Siehe auch

Referenz

inner_product (STL Samples)

Standardvorlagenbibliothek