std::adjacent_difference
![]() | Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
Определено в заголовочном файле <numeric> | ||
template<class InputIt, class OutputIt > OutputIt adjacent_difference( InputIt first, InputIt last, | (1) | |
template<class InputIt, class OutputIt, class BinaryOperation > OutputIt adjacent_difference( InputIt first, InputIt last, | (2) | |
[first, last)
и записывает их в диапазоне начиная с d_first + 1
. Немодифицированного копию first
записывается в d_first
. Первый вариант используется для расчета operator-
различия, вторая версия использует данную функцию двоичного op
.[first, last)
and writes them to the range beginning at d_first + 1
. Unmodified copy of first
is written to d_first
. The first version uses operator-
to calculate the differences, the second version uses the given binary function op
.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
*(d_first)=*first;*(d_first+1)=(*first+1)-*(first);*(d_first+2)=(*first+2)-*(first+1);*(d_first+3)=(*first+3)-*(first+2); ...
Содержание |
[править]Параметры
first, last | — | диапазон элементов Оригинал: the range of elements Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
d_first | — | В начале назначения диапазона Оригинал: the beginning of the destination range Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
op | — | binary operation function object that will be applied. The signature of the function should be equivalent to the following: Ret fun(const Type1 &a, const Type2 &b); The signature does not need to have const&. |
Требования к типам | ||
-InputIt должен соответствовать требованиям InputIterator . | ||
-OutputIt должен соответствовать требованиям OutputIterator . |
[править]Возвращаемое значение
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]Сложность
(last - first) - 1
применения бинарной операции(last - first) - 1
applications of the binary operationВы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]Возможная реализация
Первый вариант |
---|
template<class InputIt, class OutputIt> OutputIt adjacent_difference(InputIt first, InputIt last, OutputIt d_first){if(first == last)return d_first; typedeftypenamestd::iterator_traits<InputIt>::value_type value_t; value_t acc =*first;*d_first = acc;while(++first != last){ value_t val =*first;*++d_first = val - acc; acc = std::move(val);}return++d_first;} |
Второй вариант |
template<class InputIt, class T, class BinaryOperation> OutputIt adjacent_difference(InputIt first, InputIt last, OutputIt d_first, BinaryOperation op){if(first == last)return d_first; typedeftypenamestd::iterator_traits<InputIt>::value_type value_t; value_t acc =*first;*d_first = acc;while(++first != last){ value_t val =*first;*++d_first = op(val, acc); acc = std::move(val);}return++d_first;} |
[править]Пример
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
#include <numeric>#include <vector>#include <iostream>#include <functional>int main(){std::vector<int> v{2, 4, 6, 8, 10, 12, 14, 16, 18, 20}; std::adjacent_difference(v.begin(), v.end(), v.begin()); for(auto n: v){std::cout<< n <<' ';}std::cout<<'\n'; v ={1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; std::adjacent_difference(v.begin(), v.end()-1, v.begin()+1, std::plus<int>() for(auto n: v){std::cout<< n <<' ';}std::cout<<'\n';}
Вывод:
2 2 2 2 2 2 2 2 2 2 1 1 2 3 5 8 13 21 34 55
[править]См. также
вычисляет частичную сумму диапазона элементов (шаблон функции) | |
суммирует или сворачивает ряд элементов (шаблон функции) |