1. 说明
对范围[first,last)内的元素逐个求差分,并把结果放在result容器中。
x表示范围[first,last)内的元素,y表示放在result容器中的结果,求解过程如下:
y0 = x0
y1 = x1 - x0
y2 = x2 - x1
y3 = x3 - x2
y4 = x4 - x3
... ... ...
函数签名如下:
template <class InputIterator, class OutputIterator>
OutputIterator adjacent_difference (InputIterator first,
InputIterator last,
OutputIterator result);
注意:
- result容器要有足够的容量,否则报越界错误
其他说明
- 可自定义"差分"运算符
template <class InputIterator, class OutputIterator, class BinaryOperation>
OutputIterator adjacent_difference (InputIterator first,
InputIterator last,
OutputIterator result,
BinaryOperation binary_op );
2. 头文件
#include <numeric>
3. 例子-求差分数组
#include <iostream>
#include <vector>
#include <numeric>
int main(int argc, char **argv)
{
std::vector<int> nums = { 1,2,3,4,5 };
std::vector<int> result;
result.resize(nums.size());
adjacent_difference(nums.begin(), nums.end(), result.begin());
for (int num : result) {
std::cout << num << "\t";
}
return 0;
}
结果:
1 1 1 1 1
4. 例子-自定义"差分"运算符
#include <iostream>
#include <vector>
#include <numeric>
#include <functional>
int main(int argc, char **argv)
{
std::vector<int> nums = { 1,2,3,4,5 };
std::vector<int> result;
result.resize(nums.size());
adjacent_difference(nums.begin(), nums.end(), result.begin(), [](int x, int y) { return 2*x-y; });
for (int num : result) {
std::cout << num << "\t";
}
return 0;
}
结果:
1 3 4 5 6
这里使用了lambda表达式来自定义运算符。
[](int x, int y) { return 2*x-y; }
后一个数的两倍减去前一个数。
注意数的顺序,x表示后面的那个数,y表示前面的数。
5. 参考
http://www.cplusplus.com/reference/numeric/adjacent_difference/