adjacent_difference

Calcula las diferencias sucesivas entre cada elemento y su predecesor en un rango de entrada y produce resultados a un rango de destino o calcula el resultado de un procedimiento general donde la operación de la diferencia se reemplaza por otro, operación binaria especificada.

template<class InputIterator, class OutIterator>
   OutputIterator adjacent_difference(
      InputIterator _First, 
      InputIterator _Last,
      OutputIterator _Result 
   );

template<class InputIterator, class OutIterator, class BinaryOperation>
   OutputIterator adjacent_difference(
      InputIterator _First, 
      InputIterator _Last,
      OutputIterator _Result, 
      BinaryOperation _Binary_op
   );

Parámetros

  • _First
    Se ejecutó un iterador de entrada que dirige el primer elemento del intervalo de entrada cuyos elementos deben differenced con sus precursores respectivos o donde los pares de valores en por otra operación binaria especificada.

  • _Last
    Se ejecutó un iterador de entrada que dirige el último elemento del intervalo de entrada cuyos elementos deben differenced con sus precursores respectivos o donde los pares de valores en por otra operación binaria especificada.

  • _Result
    Un iterador de salida que dirige el primer elemento un rango de destino donde va a almacenar la ejecución de diferencias o de los resultados de la operación especificada.

  • _Binary_op
    La operación binaria que debe aplicar en la operación generalizada que reemplaza la operación de resta en el procedimiento diferencias.

Valor devuelto

Un iterador de salida que indica al final del intervalo de destino: _Result + (_Last - _First).

Comentarios

El _Result de iterador de salida se permite utilizar el mismo iterador que el _First de iterador de entrada , para poder calcular s para adjacent_differenceen contexto.

Para una secuencia de valores a1, a2, a3, en un rango de entrada, la primera función de plantilla almacena s sucesiva a1, a2- a1, a3 de partial_differencea2, en el intervalo de destino.

Para una secuencia de valores a1, a2, a3, en un rango de entrada, la segunda función de plantilla almacena s sucesiva a1, a2_Binary_op a1, *a3 *_Binary_op a2de partial_difference, en el intervalo de destino.

La operación binaria _Binary_op no es necesario que o asociativa o conmutativo, ya que se aplica el orden de las operaciones se especifica completamente.

adjacent_difference tiene dos formularios relacionados:

Si pasa un iterador comprobado a uno de los formatos de adjacent_difference, obtiene comportamiento comprobado de iterador.  Si pasa un iterador desactivado, obtiene comportamiento unchecked.Para obtener más información, vea Iteradores comprobados.

Ejemplo

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

int main( ) 
{
   using namespace std;
   
   vector<int> V1( 10 ), V2( 10 );
   vector<int>::iterator VIter1, VIter2, VIterend, VIterend2;

   list <int> L1;
   list <int>::iterator LIter1, LIterend, LIterend2;

   int t;
   for ( t = 1 ; t <= 10 ; t++ )
   {
      L1.push_back( t * t );
   }

   cout << "The input list L1 is:\n ( " ;
   for ( LIter1 = L1.begin( ) ; LIter1 != L1.end( ) ; LIter1++ )
      cout << *LIter1 << " ";
   cout << ")." << endl;

   // The first member function for the adjacent_differences of
   // elements in a list output to a vector
   VIterend = adjacent_difference ( L1.begin ( ) , L1.end ( ) , 
      V1.begin ( ) );
   
   cout << "Output vector containing adjacent_differences is:\n ( " ;
   for ( VIter1 = V1.begin( ) ; VIter1 != VIterend ; VIter1++ )
      cout << *VIter1 << " ";
   cout << ")." << endl;

   // The second member function used to compute
   // the adjacent products of the elements in a list
   VIterend2 = adjacent_difference ( L1.begin ( ) , L1.end ( ) , V2.begin ( ) , 
      multiplies<int>( ) );
   
   cout << "The output vector with the adjacent products is:\n ( " ;
   for ( VIter2 = V2.begin( ) ; VIter2 != VIterend2 ; VIter2++ )
      cout << *VIter2 << " ";
   cout << ")." << endl;

   // Computation of adjacent_differences in place
   LIterend2 = adjacent_difference ( L1.begin ( ) , L1.end ( ) , L1.begin ( ) );
   cout << "In place output adjacent_differences in list L1 is:\n ( " ;
   for ( LIter1 = L1.begin( ) ; LIter1 != LIterend2 ; LIter1++ )
      cout << *LIter1 << " ";
   cout << ")." << endl;
}

Output

The input list L1 is:
 ( 1 4 9 16 25 36 49 64 81 100 ).
Output vector containing adjacent_differences is:
 ( 1 3 5 7 9 11 13 15 17 19 ).
The output vector with the adjacent products is:
 ( 1 4 36 144 400 900 1764 3136 5184 8100 ).
In place output adjacent_differences in list L1 is:
 ( 1 3 5 7 9 11 13 15 17 19 ).

Requisitos

encabezado: <numérico>

espacio de nombres: std

Vea también

Referencia

adjacent_difference y vector::push_back

Biblioteca de plantillas estándar