adjacent_difference |
Calculate and sum the difference between adjacent pairs of values.
Iterate through every element in
the range [ first +1
... last ) and write the
difference between the element and its preceding element to result
. Return an iterator equal to result + n , where
n = last
- first . Assignment into
the original range is permitted. The first version uses operator-
to calculate the difference, whereas the second version uses the binary function
binary_op .
#include <numeric>
template< class InputIterator, class OutputIterator >
OutputIterator adjacent_difference
(
InputIterator first,
InputIterator last,
OutputIterator result
);
template
<
class InputIterator,
class OutputIterator,
class BinaryOperation
>
OutputIterator adjacent_difference
(
InputIterator first,
InputIterator last,
OutputIterator result,
BinaryOperator binary_op
);
Time complexity is linear as operator-
or binary_op are applied ( last
- first -
1 ) times. Space complexity is constant.
#include <iostream>
#include <numeric>
int numbers[ 5 ] = { 1, 2, 4, 8, 16 };
void
main()
{
int difference[ 5 ];
adjacent_difference( numbers, numbers + 5, difference );
int i;
for ( i = 0; i < 5; ++i )
cout << numbers[ i ] << ` `;
cout << "\n";
for ( i = 0; i < 5; ++i )
cout << difference[ i ] << ` `;
cout << "\n";
}
1 2 3 8 16
1 1 2 4 8
#include <iostream>
#include <iterator>
#include <vector>
#include <numeric>
void
main()
{
vector< int > v( 10 );
for ( size_t i = 0; i < v.size(); ++i )
v[ i ] = i * i;
vector< int > result( v.size() );
adjacent_difference( v.begin(), v.end(), result.begin() );
ostream_iterator< int > iter( cout, " " );
copy( v.begin(), v.end(), iter );
cout << "\n";
copy( result.begin(), result.end(), iter );
cout << "\n";
}
0 1 4 9 16 25 36 49 64 81
0 1 3 5 7 9 11 13 15 17
#include <iostream>
#include <iterator>
#include <vector>
#include <numeric>
int
mult( int a, int b )
{
return a * b;
}
void
main()
{
vector< int > v( 10 );
for ( size_t i = 0; i < v.size(); ++i )
v[ i ] = i + 1;
vector< int > result( v.size() );
adjacent_difference( v.begin(), v.end(), result.begin(), mult );
ostream_iterator< int > iter( cout, " " );
copy( v.begin(), v.end(), iter );
cout << "\n";
copy( result.begin(), result.end(), iter );
cout << "\n";
}
1 2 3 4 5 6 7 8 9 10
1 2 6 12 20 30 42 56 72 90
Copyright©1994-2026 Recursion Software LLC
All Rights Reserved - For use by licensed users only.