std::adjacent_difference en C++

Calcular diferencia adyacente de rango
Asigna a cada elemento en el rango que comienza en resultado, la diferencia entre su elemento correspondiente en el rango [primero, último] y el que lo precede (excepto para *resultado, que se asigna *primero).

Si x representa un elemento en [primero, último] e y representa un elemento en resultado, la y se puede calcular como:

y0 = x0
y1 = x1 - x0
y2 = x2 - x1
y3 = x3 - x2
y4 = x4 - x3
and so on.

1. Uso de la versión predeterminada:
Sintaxis:
Plantilla:

OutputIterator adjacent_difference (InputIterator first,
                                    InputIteratorlast,
                                    OutputIterator result);
Parameters :

first, last
Input iterators to the initial and final positions in a sequence.
The range used is [first, last], which contains all the elements
between first and last, including the element pointed by first but
not the element pointed by last.

result
Output iterator to the initial position in the destination sequence
where the differences are stored. The range starts at result and
shall have a size large enough to contain as many elements as the
range above [first, last]. 

Return Type :
An iterator pointing to past the last element of the destination
sequence where resulting elements have been stored.

// CPP program to illustrate
// std :: adjacent_difference
  
#include <iostream> // std::cout
#include <numeric> // std::adjacent_difference
  
// Driver code
int main()
{
    int val[] = { 1, 2, 3, 5, 9, 11, 12 };
    int n = sizeof(val) / sizeof(val[0]);
    int result[7];
  
    // Array contains
    std::cout << "Array contains :";
    for (int i = 0; i < n; i++)
        std::cout << " " << val[i];
    std::cout << "\n";
  
    // Using default std :: adjacent_difference
    std::adjacent_difference(val, val + 7, result);
    std::cout << "Using default adjacent_difference: ";
    for (int i = 1; i < n; i++)
        std::cout << result[i] << ' ';
    std::cout << '\n';
  
    return 0;
}

Producción:

Array contains : 1 2 3 5 9 11 12
Using default adjacent_difference: 1 1 2 4 2 1

2. Usando una versión personalizada, tomando la función como borrador
Sintaxis:
Plantilla:

OutputIterator adjacent_difference (InputIterator first,
                                    InputIterator last,
                                    OutputIterator result,
                                    BinaryOperation binary_op);

Parameters :

first, last, result are same as above.

binary_op
Binary operation taking as arguments two elements of the type
pointed by InputIterator, and returning the result of the
replacement for the difference operation.
This can either be a function pointer or a function object. 

Return Type :
An iterator pointing to past the last element of the destination
sequence where resulting elements have been stored.

Al cambiar el operador a cualquier operador binario en la función personalizada, podemos cambiar la operación que se aplica en la función STL. Aquí se realiza la suma de elementos adyacentes.

// CPP program to illustrate
// std :: adjacent_difference
  
#include <iostream> // std::cout
#include <numeric> // std::adjacent_difference
  
int comp(int x, int y)
{
    return x + y;
}
  
// Driver code
int main()
{
    int val[] = { 1, 2, 3, 5, 9, 11, 12 };
    int n = sizeof(val) / sizeof(val[0]);
    int result[7];
  
    // Array contains
    std::cout << "Array contains :";
    for (int i = 0; i < n; i++)
        std::cout << " " << val[i];
    std::cout << "\n";
  
    // std :: adjacent_difference using custom function
    std::adjacent_difference(val, val + 7, result, comp);
  
    std::cout << "Using custom function: ";
    for (int i = 0; i < n; i++)
        std::cout << result[i] << ' ';
    std::cout << '\n';
  
    return 0;
}

Producción:

Array contains : 1 2 3 5 9 11 12
Using custom function: 1 3 5 8 14 20 23 

Aplicación práctica: Realizar cualquier operación binaria entre los elementos adyacentes del rango mencionado (excepto el primer elemento del rango).

1. Encuentra el producto de los elementos adyacentes en la array.
Por ejemplo, la array contiene: 2 4 5 6 El
resultado es: 2 8 20 30
Explicación: los primeros elementos permanecen como están. Entonces el segundo elemento será primer elemento * segundo elemento, luego el tercer elemento será segundo elemento * tercer elemento y así sucesivamente.

// CPP program to illustrate
// std :: adjacent_difference
  
#include <iostream> // std::cout
#include <numeric> // std::adjacent_difference
  
int comp(int x, int y)
{
    return x * y;
}
  
// Driver code
int main()
{
    int val[] = { 5, 7, 4, 8, 2 };
    int n = sizeof(val) / sizeof(val[0]);
    int result[n];
  
    // Array contains
    std::cout << "Array contains :";
    for (int i = 0; i < n; i++)
        std::cout << " " << val[i];
    std::cout << "\n";
  
    // Using custom std :: adjacent_difference
    std::adjacent_difference(val, val + 7, result, comp);
    std::cout << "Result contains :";
    for (int i = 0; i < n; i++)
        std::cout << ' ' << result[i];
    std::cout << '\n';
  
    return 0;
}

PRODUCCIÓN :

Array contains : 5 7 4 8 2
Result contains : 5 35 28 32 16

Este artículo es una contribución de Sachin Bisht . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *