数值算法是对容器的内容进行数值计算
STL的数值算法实现了四种类型的计算即加减乘除,可以在一个值序列上进行这些计算,数值算法如表所示:
函数 | 说明 |
accumulate(first,last,init) | 计算结果是所有元素之和加上init的值,返回值是一个数的类型 |
inner_product(fist,last,first2,init) | 计算结果是相应的元素相乘并且求和,求和后的值加上init即为最后的结果 |
partial_sum(first,last,result) | 计算结果是第n个元素是前n项(包含本身)元素之和,result是保存最终结果的一个容器 |
adjacent_difference(first,last,result) | 计算结果是第n项元素是第n项减去n-1项的结果,result是保存结果的容器 |
代码实现如下,代码中有对四种函数的详细解释说明:
#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;
}
运行的结果如下图所示:
具体的详细解释请看代码段之间的文字说明,大家可以自己动手试着去修改一下代码来实现自己想完成的算法,动手做一做会比纯靠脑子想会好很多。