STL標準ライブラリの数値アルゴリズムの詳細説明(accumulate、inner_product、partial_sum、adiference_difference関数の詳細説明)

数値アルゴリズムは、コンテナの内容に対して実行される数値計算です。

STL の数値アルゴリズムは、加算、減算、乗算、除算の 4 種類の計算を実装します。これらの計算は、一連の値に対して実行できます。数値アルゴリズムを表に示します。

関数 説明する
蓄積(最初、最後、初期) 計算結果は全要素の合計とinitの値を加算したものとなり、戻り値は数値型となります。
inner_product(最初、最後、最初の 2、初期化) 計算結果は対応する要素の乗算と合計であり、合計値に init を加えたものが最終結果となります。
部分合計(最初、最後、結果) 計算結果は、n 番目の要素が最初の n 項目 (それ自体を含む) の合計であり、結果は最終結果を保存するためのコンテナーになります。
隣接差分(最初、最後、結果) 計算結果は、n番目の要素がn番目の項目からn-1個の項目を引いた結果であり、結果は結果を保存するコンテナです

コードは次のように実装されており、コード内の 4 つの関数の詳細な説明があります。

#include<iostream>
#include<vector>
#include<algorithm>
#include<numeric> 	//需要加入数值算法的头文件 
using namespace std;
void output(int val)
{
	cout << " " << val;
}
int multi(int a,int b)
{
	return a*b;
}
int main()
{
	vector<int> ivc1,ivc2;
	int n,x;
	cout << "请输入元素个数:" << endl;
	cin >> n;
	cout << "请输入各个元素的值:" << endl;
	for(int i = 0; i < n; i++)
	{
		cin >> x;
		ivc1.push_back(x);
	}
	for(int i = 0; i < n; i++)
	{
		cin>>x;
		ivc2.push_back(x);
	}
	cout << "ivc1:" << endl;
	for_each(ivc1.begin(),ivc1.end(),output);
	cout << endl;
	cout << "ivc2:" << endl;
	for_each(ivc2.begin(),ivc2.end(),output);
	cout << endl << endl;
	
	/*
		今天详细介绍一下数值算法嘿嘿
		数值算法是对容器中的内容进行数值上的计算
		STL的数值算法实现了4种类型的计算,可以在一个值序列上进行这些计算。
	*/ 
	/*
		using accumulate(first,last,init)
		first是指 指向第一个元素的迭代器,last是指 指向最后一个元素的迭代器,init是一个数值,与容器之中的元素求和 
		accumulate 算法是用来对该容器进行累加求和的算法,返回一个最终累加的结果
	*/ 
	int result = accumulate(ivc1.begin(),ivc1.end(),7);
	cout << "After accumulate():" << endl;
		cout << result<<endl<<endl;
	
	/*
		inner_product(first,last,first2,init)
		first,last,first2都是指容器中的开始结尾的迭代器
		而init是在两个容器对应元素相乘后加上的元素
		具体代码如下: 
	*/
	cout << "After inner_product():" << endl;
	int inner1 = inner_product(ivc1.begin(),ivc1.end(),ivc2.begin(),0);
	cout << "init = 0:" << endl;
	cout << inner1 << endl; 
	int inner2 = inner_product(ivc1.begin(),ivc1.end(),ivc2.begin(),2);
	cout << "init = 2:" << endl;
	cout << inner2 << endl;
	cout << endl;
	
	/*
		partial_sum(first,last,result)
		first,last都是指向容器的一个迭代器 
		1.容器要计算的起始位置,容器要计算的结束位置,结果存放的起始位置 
		2.容器要计算的起始位置,容器要计算的结束位置,结果存放的起始位置,自定义函数
		局部求和,第一个元素是本身,第二个元素是1.2元素之和,第三个元素是1.2.3元素之和,以此类推。 
	*/ 
	
	cout << "After partial_sum():" << endl;
	partial_sum(ivc1.begin(),ivc1.end(),ivc2.begin());
	cout << "Use partial deal with ivc1:" << endl;
	for_each(ivc2.begin(),ivc2.end(),output);
	cout << endl;
	partial_sum(ivc1.begin(),ivc1.end(),ivc2.begin(),multi);
	cout << "Use partial(multi) deal with ivc1:" << endl;
	for_each(ivc2.begin(),ivc2.end(),output);
	cout << endl << endl;
	
	/*
		adjacent_difference(first,last,result)
		(容器所要计算的起始位置,容器所要计算的结束位置,计算结果的存储的起始位置) 
		第一个元素是本身,第二个元素是2-1的结果,第三个元素是3-2的结果,以此类推 
	*/	
	cout << "After adjacent_difference():" << endl;
	adjacent_difference(ivc1.begin(),ivc1.end(),ivc2.begin());
	for_each(ivc2.begin(),ivc2.end(),output);
	cout << endl;
}

操作の結果を次の図に示します。

ウォーターマーク、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBA5bCP5L6v5LiN6Lq65bmzLg==、size_14、color_FFFFFF、t_70、g_se、x_16

詳細な説明については、コード セグメント間のテキストの説明を参照してください。完成したいアルゴリズムを実現するために、自分でコードを変更してみることができます。 

 

 

おすすめ

転載: blog.csdn.net/m0_61886762/article/details/124224837