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。
感谢您的浏览。