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 的使用的主要内容,如果未能解决你的问题,请参考以下文章

C++ 使用adjacent_difference

我可以通过它来代替 ATL 的使用以获得相同或更好的性能?

FPGA两种寄存器的使能

JavaScript 的使?

JavaScript 的使?

python paramiko模块的使