数値アルゴリズムは、コンテナの内容に対して実行される数値計算です。
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;
}
操作の結果を次の図に示します。
詳細な説明については、コード セグメント間のテキストの説明を参照してください。完成したいアルゴリズムを実現するために、自分でコードを変更してみることができます。