Bibliothèque numérique C ++ - inner_product

La description

Il est utilisé pour calculer le produit interne cumulatif de la plage et renvoie le résultat de l'accumulation de init avec les produits internes des paires formées par les éléments de deux plages en commençant par first1 et first2.

Déclaration

Voici la déclaration pour std :: inner_product.

C ++ 98

template <class InputIterator1, class InputIterator2, class T>
   T inner_product (InputIterator1 first1, InputIterator1 last1,
                    InputIterator2 first2, T init);

template <class InputIterator1, class InputIterator2, class T,
          class BinaryOperation1, class BinaryOperation2>
   T inner_product (InputIterator1 first1, InputIterator1 last1,
                    InputIterator2 first2, T init,
                    BinaryOperation1 binary_op1,
                    BinaryOperation2 binary_op2);

C ++ 11

template <class InputIterator1, class InputIterator2, class T>
   T inner_product (InputIterator1 first1, InputIterator1 last1,
                    InputIterator2 first2, T init);
					
template <class InputIterator1, class InputIterator2, class T,
          class BinaryOperation1, class BinaryOperation2>
   T inner_product (InputIterator1 first1, InputIterator1 last1,
                    InputIterator2 first2, T init,
                    BinaryOperation1 binary_op1,
                    BinaryOperation2 binary_op2);
  • first, last - Il effectue une itération vers les positions initiale et finale dans une séquence.

  • init - C'est une valeur initiale pour l'accumulateur.

  • binary_op - C'est une opération binaire.

  • binary_op2 - C'est une opération binaire et prenant deux éléments.

Valeur de retour

Il renvoie le résultat de l'accumulation de init et les produits de toutes les paires d'éléments dans les plages commençant par first1 et first2.

Des exceptions

Il lance si l'une des opérations sur les éléments ou les itérateurs est lancée.

Courses de données

Les éléments de la plage [first1, last1) sont accessibles.

Exemple

Dans l'exemple ci-dessous pour std :: adjacent_difference.

#include <iostream>
#include <functional>
#include <numeric>

int myaccumulator (int x, int y) {return x-y;}
int myproduct (int x, int y) {return x+y;}

int main () {
   int init = 100;
   int series1[] = {20,30,40};
   int series2[] = {1,2,3};

   std::cout << "Default inner_product: ";
   std::cout << std::inner_product(series1,series1+3,series2,init);
   std::cout << '\n';

   std::cout << "Functional operations: ";
   std::cout << std::inner_product(series1,series1+3,series2,init,
      std::minus<int>(),std::divides<int>());
   std::cout << '\n';

   std::cout << "Ccustom functions: ";
   std::cout << std::inner_product(series1,series1+3,series2,init,
      myaccumulator,myproduct);
   std::cout << '\n';

   return 0;
}

La sortie devrait être comme ça -

Default inner_product: 300
Functional operations: 52
Ccustom functions: 4