1. 說明
對范圍[first,last)內(nèi)的元素逐個求差分系草,并把結(jié)果放在result容器中往枷。
x表示范圍[first,last)內(nèi)的元素亿眠,y表示放在result容器中的結(jié)果,求解過程如下:
y0 = x0
y1 = x1 - x0
y2 = x2 - x1
y3 = x3 - x2
y4 = x4 - x3
... ... ...
函數(shù)簽名如下:
template <class InputIterator, class OutputIterator>
OutputIterator adjacent_difference (InputIterator first,
InputIterator last,
OutputIterator result);
注意:
- result容器要有足夠的容量欣硼,否則報(bào)越界錯誤
其他說明
- 可自定義"差分"運(yùn)算符
template <class InputIterator, class OutputIterator, class BinaryOperation>
OutputIterator adjacent_difference (InputIterator first,
InputIterator last,
OutputIterator result,
BinaryOperation binary_op );
2. 頭文件
#include <numeric>
3. 例子-求差分?jǐn)?shù)組
#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;
}
結(jié)果:
1 1 1 1 1
4. 例子-自定義"差分"運(yùn)算符
#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;
}
結(jié)果:
1 3 4 5 6
這里使用了lambda表達(dá)式來自定義運(yùn)算符。
[](int x, int y) { return 2*x-y; }
后一個數(shù)的兩倍減去前一個數(shù)恶阴。
注意數(shù)的順序诈胜,x表示后面的那個數(shù)豹障,y表示前面的數(shù)。
5. 參考
http://www.cplusplus.com/reference/numeric/adjacent_difference/