adjacent_difference 的使用

adjacent_difference是 STL 算法组件中的算法。adjacent_difference 的作用:计算返回相邻元素的差值。

下面以vector容器和int数组为例:
adjacent_difference
代码:

#include <iostream>
#include <vector>
#include <numeric>
using namespace std;// 输出 vector 容器
void showV(vector<int> v)
{vector<int>::iterator vi;//迭代器for (vi = v.begin(); vi < v.end(); vi++) { cout << *vi << " "; }cout << endl;
}
// 输出 数组
void showArray(int a[], int n)
{for (int i = 0; i < n; i++) { cout << a[i] << " "; }cout << endl;
}
// 函数,返回 两个数之和
int myfunc(int i, int j) { return i + j; }void main2()// adjacent_difference
{//创建两个容器 和 两个数组vector<int> v = { 3,4,7,15,20,30,70,100,205,300 };vector<int> v2(10);vector<int> v3(10);int arr[10] = { 21,22,23,24,25,26,27,28,29,30 };int arr2[10] = { 0 };int arr3[10] = { 0 };int arr4[10] = { 0 };int arr5[10] = { 0 };cout << "执行算法要遍历的对象:" << endl;cout << "v:\t";      showV(v);cout << "arr:\t";  showArray(arr, 10);// 遍历容器,用容器接收结果adjacent_difference(v.begin(), v.end(), v2.begin());adjacent_difference(v.begin(), v.end(), v3.begin(), myfunc);// 遍历容器,用数组接收结果adjacent_difference(v.begin(), v.end(), arr2);adjacent_difference(v.begin(), v.end(), arr3, myfunc);// 遍历数组,用数组接收结果adjacent_difference(arr, arr + 9, arr4);adjacent_difference(arr, arr + 9, arr5, myfunc);// 遍历容器,用容器自身接收结果adjacent_difference(v.begin(), v.end(), v.begin());cout << "\n执行算法后,结果显示:" << endl;cout << "\n遍历数组,用容器接收结果\n";cout << "v2:\t";    showV(v2);cout << "v3:\t";  showV(v3);cout << "\n遍历容器,用数组接收结果\n";cout << "arr2:\t";  showArray(arr2, 10);cout << "arr3:\t";  showArray(arr3, 10);cout << "\n遍历数组,用数组接收结果\n";cout << "arr4:\t";    showArray(arr4, 10);cout << "arr5:\t";  showArray(arr5, 10);cout << "\n遍历容器,用容器自身接收结果\n";cout << "v:\t";     showV(v);
}

运行结果显示:


对于算法 adjacent_difference,
其默认的调用是返回相邻两个元素的差值,如上面运行结果中的 v2,arr2,arr4;

如果不想使用默认的方法,可以自行写一个函数代替算法默认调用的函数,如上面运行结果中的 v3,arr3,arr5,调用的函数返回的是两个元素的和,计算结果就是相邻两个元素的和。

adjacent_difference 实际是将相邻的两个元素传到仿函数,然后i偶获取仿函数的返回值,将返回值放置到容器(数组),至于仿函数做什么操作,可以根据实际需求写方法去实现。

adjacent_difference 可以用遍历的对象去接收执行算法后的结果(返回值),并不会产生什么冲突,但会改变遍历的对象的值,慎用。

使用 adjacent_difference 需包含头文件 numeric

感谢您的浏览。

adjacent_difference 的使用相关推荐

  1. STL 之accumulate,adjacent_difference,inner_product,partial_sum

    accumulate,adjacent_difference,inner_product,partial_sum 这些算法都是数字算法,因此只能操作数字类型的数据. 头文件 #include < ...

  2. STL源码剖析 数值算法 accumulate | adjacent_difference | inner_product | partial_sum | power | itoa

    //版本1 template <class InputIterator,class T> T accumulate(InputIterator first,InputIterator la ...

  3. STL之adjacent_difference

    需要的头文件: numeric 源码: //版本1 template <class _InputIterator, class _OutputIterator> _OutputIterat ...

  4. C++11标准模板(STL)- 算法(std::adjacent_difference)

    定义于头文件 <algorithm> 算法库提供大量用途的函数(例如查找.排序.计数.操作),它们在元素范围上操作.注意范围定义为 [first, last) ,其中 last 指代要查询 ...

  5. C++拾取——使用stl标准库生成等差、等比数列的方法

    代码是思想的表达.阅读代码是一个猜测.求证的过程.这个过程非常费脑,所以人们都不喜欢啰啰嗦嗦的表达方式.于是在相同认知水平下,简洁高效的表达是喜闻乐见的.本文将抛砖引玉,通过一些案例讲解如何去简化代码 ...

  6. Effective STL 50条有效使用STL的经验笔记

    Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...

  7. C++/C++11中头文件numeric的使用

    <numeric>是C++标准程序库中的一个头文件,定义了C++ STL标准中的基础性的数值算法(均为函数模板): (1).accumulate: 以init为初值,对迭代器给出的值序列做 ...

  8. 【C++】Effective STL:50条有效使用STL的经验

    第一条:慎重选择容器类型 1.C++容器:先混个眼熟 序列容器:array.vector.string.deque.list.forward_list 有序关联容器:set.map.multiset. ...

  9. 【C++】C++11 STL算法(七):排列操作(Permutation operations)、数值操作(Numeric operations)

    排列操作(Permutation operations) 一.is_permutation 1.原型: template< class ForwardIt1, class ForwardIt2 ...

  10. 2015级C++第15周程序阅读 范型程序设计

    阅读下面的程序,对照运行结果,领会STL的用法 (1) #include <string> #include <set> #include <iterator> # ...

最新文章

  1. powerDesign设计随笔
  2. java完整程序_求一个完整的java程序
  3. js二维数组_Javascript数组
  4. 移植wpa_supplicant 2.2问题
  5. Android学习之布局管理器嵌套
  6. 安装JDK_Tomcat
  7. linux安装gcc等程序包,Linux手动安装gcc-8.3.0
  8. uniapp创建电子签名
  9. 富士通Fujitsu DPK2180T 打印机驱动
  10. 微信网络营销 你造吗?
  11. 类加载机制--双亲委派
  12. 二叉平衡树 之 红黑树 (手动模拟实现)
  13. 面向对象编程 面向过程编程_面向对象的编程真的是死定了
  14. iOS获取APP在苹果App Store中的最新版本信息
  15. anki server 错误与解决
  16. 机械制造与自动化类毕业论文文献有哪些?
  17. 基于XXL-JOB和钉钉机器人构建系统监控
  18. 证券市场基本法律法规
  19. android 无缝连续播放视频
  20. WiFi连接满格信号但是不能上网?

热门文章

  1. 游标CURSOR的基本用法
  2. vs code语言模式自动检测设置
  3. c语言混沌序列,基于混沌序列的数据加密算法
  4. tableau高级绘图(十二)-tableau绘制辐射堆叠图
  5. 2022.10.13(四)[仿写《百草园到三味书屋》第二段]
  6. jupyterLab增大字体大小
  7. linux ftp 取文件,linux下拉取文件的方法
  8. Cocos2dx基础手册
  9. java 定义类私有类_关于java:为什么不能将一个类定义为protected?
  10. ElasticsearchException解决方案