Biblioteca numérica de C ++ - inner_product
Descripción
Se utiliza para calcular el producto interno acumulativo de rango y devuelve el resultado de acumular init con los productos internos de los pares formados por los elementos de dos rangos comenzando en first1 y first2.
Declaración
A continuación se muestra la declaración de 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 - Itera a las posiciones inicial y final de una secuencia.
init - Es un valor inicial para el acumulador.
binary_op - Es una operación binaria.
binary_op2 - Es operación binaria y toma dos elementos.
Valor devuelto
Devuelve el resultado de acumular init y los productos de todos los pares de elementos en los rangos que comienzan en first1 y first2.
Excepciones
Lanza si arroja alguna de las operaciones sobre los elementos o iteradores.
Carreras de datos
Se accede a los elementos del rango [primero1, último1).
Ejemplo
En el siguiente ejemplo para std :: adyacente_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 salida debería ser así:
Default inner_product: 300
Functional operations: 52
Ccustom functions: 4