C++ adjacent_difference相邻差计算方法详解

C++ adjacent_difference相邻差计算方法详解,第1张

概述numeric 头文件中的 adjacent_difference() 算法可以算出输入序列中相邻元素对的差,并将它们保存到另一个序列中。第一个元素会被原封不动地复制到新的序列中,然后用第二个元素减去第一 numeric 头文件中的 adjacent_difference() 算法可以算出输入序列中相邻元素对的差,并将它们保存到另一个序列中。第一个元素会被原封不动地复制到新的序列中,然后用第二个元素减去第一个元素的结果作为新序列的第二个元素,再用第三个元素减去第二个元素的结果作为新序列的第三个元素,以此类推。例如:
std::vector<int> data {2,3,5,7,11,13,17,19}; std::cout << "Differences: ";std::adjacent_difference(std::begin(data),std::end(data),std::ostream_iterator<int>{std::cout," "});std::cout << std::endl;// Differences: 2 1 2 2 4 2 4 2
data 容器中元素之间的差值被 adjacent_difference() 算法直接输出,因为输出序列的迭代器是一个写到 cout 的输出流迭代器。这里产生的输出如注释所示。

这个算法的第二个版本允许指定一个运算符来代替应用到元素对上的减法运算符。下面是一个示例:
std::vector<int> data {2,19};std::cout << "Products : ";std::adjacent_difference (std::begin (data)," "},std::multiplIEs<>());std::cout << std::endl;  // Products : 2 6 15 35 77 143 221 323
第 4 个参数是一个指定元素之间运算的函数对象,在这个示例中是一个来自于 functional 头文件的 multiplIEs 实例。可以看到,这样会得到 data 中连续元素的乘积。这个函数可以接受任何二元运算,只要不改变输入序列或者使迭代器无效。下面是一个将 plus<T> 函数对象用作元素对之间的运算符来计算 Fibonacci 数列的示例:
std::vector<size_t> fib(15,1); // 15 elements initialized with 1std::adjacent_difference(std::begin(fib),std::end(fib)-1,std::begin(fib)+1,std::plus<size_t>());std::copy(std::begin(fib),std::end(fib),std::ostream_iterator<size_t>{std::cout," "});std::cout << std::endl; // Output: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
这里 adjacent_diflference() 算法会对 fib 容器中的元素对进行相加,并将结果写回从第二个元素开始的 fib 容器。fib 的最后一个元素没有包含输入序列,输入序列中最后两个元素的和会覆盖最后一个元素的值。在这个运算之后,fib 会包含一个从 1 开始的 Fibonacci 数列。注释显示了 copy() 算法生成的输出。
总结

以上是内存溢出为你收集整理的C++ adjacent_difference相邻差计算方法详解全部内容,希望文章能够帮你解决C++ adjacent_difference相邻差计算方法详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1231475.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存