C++ STL adjacent_difference 函数说明 求差分数组

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/

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容