Freigeben über


inner_product

Berechnet die Summe des elementweisen Produkts von zwei Bereichen und fügt sie einem angegebenen Anfangswert hinzu oder berechnet das Ergebnis einer allgemeinen Prozedur, in der die Summen- und Produktbinären Standardoperationen durch weitere 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 oder Skalarprodukt generalisiertes Skalarprodukt mit dem zweiten Bereich, berechnet werden soll.

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

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

  • _Val
    Ein Anfangswert, dem das Skalarprodukt oder das Skalarprodukt generalisierte 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 wird die Summe der elementweisen Produkte zurück und fügt sie dem angegebenen Anfangswert hinzu. Somit Wertebereiche für ai und Bi, fällt zurück:

_Val + ( a1 * *B)*1 + ( a2 * *B)*2 +

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

Die zweiten Memberfunktionsrückgaben:

     _Val _Binary_op1 (ein 1 _Binary_op2 *B)*1 _Binary_op1 (ein 2 _Binary_op2 *B)*2 _Binary_op1

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

Hinweise

Der Anfangswert wird sichergestellt, dass ein klar definiertes Ergebnis gibt, wenn der Bereich leer ist, in diesem Fall _Val zurückgegeben wird. Die binäre Operationen, müssen nicht assoziativ oder auswechselbar zu sein. Der Bereich muss gültig sein und Komplexität ist mit der Größe des Bereichs linear. Der Rückgabetyp des binären Operators muss 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;
}

Ausgabe

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: <numerisch>

Namespace: std

Siehe auch

Referenz

inner_product (STL-Beispiele)

Standardvorlagenbibliothek