C++adjacent_difference 的使用
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++adjacent_difference 的使用相关的知识,希望对你有一定的参考价值。
adjacent_difference 的使用
介绍
-
adjacent_difference
是 STL 算法组件中的算法。 -
adjacent_difference
的作用:计算返回相邻元素的差值。
adjacent_difference
()是位于numeric
头文件中,用来比较序列中相邻元素的差值,并将它们的差值保存到另外一个序列上。
因为第一个的前一个值为空,所以第一个元素会原封不动的复制到序列中,然后第二个元素和第一个元素相减结果作为新的第二个序列元素,再用第三个元素减去第二个元素得到新的第三个序列元素。由此类推。
它有两种写法,一种是上述的默认减法,另外一种就是定义运算法。
具体用法如下:
#include <iostream>
#include <vector>
#include <numeric>
#include <iterator>
int main()
std::vector<int> v = 3, 4, 2, 8, 15, 7 ;
std::vector<int> result;
std::adjacent_difference(v.begin(), v.end(), std::back_inserter(result));
std::cout << "Original vector: ";
for (auto i : v) std::cout << i << ' ';
std::cout << "\\nResult vector: ";
for (auto i : result) std::cout << i << ' ';
return 0;
这段代码计算了给定向量 v
中相邻元素之间的差值,并将结果存储到另一个向量 result
中。输出如下:
Original vector: 3 4 2 8 15 7
Result vector: 3 1 -2 6 7 -8
其中,std::adjacent_difference
的第一个参数是要计算的序列的起始迭代器,第二个参数是要计算的序列的结束迭代器,第三个参数是结果序列的起始迭代器。在本例中,std::back_inserter(result)
创建了一个插入迭代器,该迭代器可以用于将元素插入到 result
的末尾。
定义运算法
#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);
#include <iterator>//ostream_iterator的使用
#include <numeric>//adjacent_difference的使用
#include<vector>
#include<iostream>
using namespace std;
void main()
vector<int> data 2,3,1,5,2,8,4,2 ;
cout << "相减:";
adjacent_difference(data.begin(), data.end(), ostream_iterator<int>(cout, " "));
cout << endl;
cout << "相加";
adjacent_difference(data.begin(), data.end(), ostream_iterator<int>(cout, " "), plus<int>());//加法
cout << endl;
cout << "相乘";
adjacent_difference(data.begin(), data.end(), ostream_iterator<int>(cout, " "), multiplies<int>());//乘法
Reference
https://blog.csdn.net/weixin_44566320/article/details/93921155
http://www.manongjc.com/detail/8-cutnsnnpksdxyuo.html
加油!
感谢!
努力!
以上是关于C++adjacent_difference 的使用的主要内容,如果未能解决你的问题,请参考以下文章