Freigeben über


adjacent_difference

Berechnet die aufeinander folgenden Unterschiede zwischen jedem Element und seinem Vorgänger in einem Eingabebereich und gibt die Ergebnisse zu einem Zielbereich aus oder berechnet das Ergebnis einer verallgemeinerten Prozedur, in der der Unterschiedvorgang durch andere ersetzt wird, angegebene binäre Operation.

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
   );

Parameter

  • _First
    Ein Eingabeiterator, der das erste Element im Eingabebereich abweicht, dessen Elemente mit ihren jeweiligen Vorgängern differenced sollen, oder in dem die Paare von Werten durch eine andere angegebene binäre Operation an verwendet werden soll.

  • _Last
    Ein Eingabeiterator, der das letzte Element im Eingabebereich abweicht, dessen Elemente mit ihren jeweiligen Vorgängern differenced sollen, oder in dem die Paare von Werten durch eine andere angegebene binäre Operation an verwendet werden soll.

  • _Result
    Ein Ausgabeiterator, der dem ersten Element einen Zielbereich behandelt, in dem die Reihe von Unterschieden oder der Ergebnisse des angegebenen Vorgangs gespeichert werden soll.

  • _Binary_op
    Die binäre Operation, die im generalisierten Vorgang angewendet werden soll, der den Vorgang der Subtraktion in der Unterscheidung Prozedur ersetzt.

Rückgabewert

Ein Ausgabeiterator, der das Ende des Zielbereichs behandelt: _Result + (_Last - _First).

Hinweise

Der Ausgabeiterator _Result darf der gleiche Iterator wie der Eingabeiterator _First, sein, damit adjacent_differences an der Stelle abgeleitet werden kann.

Eine Sequenz von Werten a1, speichert a2, a3, in einem Eingabebereich, die erste Vorlagenfunktion aufeinander folgende partial_difference s a1, a2- a1, a3 - a2, im Zielbereich.

Eine Sequenz von Werten a1, speichert a2, a3, in einem Eingabebereich, die zweite Vorlagenfunktion aufeinander folgende partial_difference s a1, a2_Binary_opa1, a3_Binary_opa2, im Zielbereich.

Die binäre Operation _Binary_op ist nicht erforderlich, vereinigend ist entweder, oder auswechselbar, da die Operationsreihenfolge gilt, wird vollständig angegeben.

adjacent_difference hat zwei verknüpfte Formulare:

Wenn Sie einen überprüfter Iterator auf eines der Formen von adjacent_difference übergeben, werden Sie Iteratorverhalten überprüft. Wenn Sie einen deaktivierten Iterator übergeben, rufen Sie deaktiviertes Verhalten ab.Weitere Informationen finden Sie unter Überprüfte Iteratoren.

Beispiel

// 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 ).

Anforderungen

Header: <numeric>

Namespace: std

Siehe auch

Referenz

adjacent_difference und vector::push_back

Standardvorlagenbibliothek