Синтаксис:
#include <numeric> output_iterator adjacent_difference( input_iterator start, input_iterator end, output_iterator result ); output_iterator adjacent_difference( input_iterator start, input_iterator end, output_iterator result, BinaryFunction f );
Функция adjacent_difference() вычисляет разницу между смежными элементами диапазона [start,end), и располагает результат начиная с итератора result. (Конкретнее говоря, элемент с позиции start копируется в позицию result, а затем разница между элементами в позиции start + i и start + (i-1) располагается в позицию result + i).
Если задана бинарная функция f, то она используется вместо оператора -, чтобы вычислить разность. adjacent_difference() работает за линейное время.
Следующий пример показывает разность между смежными элементами вектора:
#include <algorithm> #include <iostream> #include <iterator> #include <numeric> #include <vector> int main() { std::vector<int> v; for (int i = 3; i <= 10; ++i) v.push_back(i); // display elements of v std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << std::endl; // display all differences between elements std::adjacent_difference(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " ")); return 0; }
Этот код дает следующий вывод:
3 4 5 6 7 8 9 10 3 1 1 1 1 1 1 1
Смотрите также: accumulate, count, inner_product, partial_sum