C++ STL adjacent_difference 函数说明

2020-06-06  本文已影响0人  book_02

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);

注意:

  1. result容器要有足够的容量,否则报越界错误

其他说明

  1. 可自定义"差分"运算符
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/

上一篇 下一篇

猜你喜欢

热点阅读