STL算法之数值算法
程序员文章站
2022-03-23 09:45:05
...
- accumlate() 以value为初始值累加区间元素
- inner_product() 区间1: a1 a2 a3 a4
区间2: b1 b2 b3 b4
result = initvalue op1 (a1 op2 b1) op1 (a2 po2 b2)……
result类型由initvalue决定 - partial_sum()
区间1: a1 a2 a3 a4
得到序列: a1 (a1 op a2) (a1 op a2 op a3)… - adjacent_difference()
区间1: a1 a2 a3 a4
得到序列: a1 (a2 op a1) (a3 op a2)…..
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <functional>
using namespace std;
// 1. accumlate() 以value为初始值累加区间元素
// 2. inner_product()
// 区间1: a1 a2 a3 a4
// 区间2: b1 b2 b3 b4
// result = initvalue op1 (a1 op2 b1) op1 (a2 po2 b2)......
// result类型由initvalue决定
// 3. partial_sum()
// 区间1: a1 a2 a3 a4
// 得到序列: a1 (a1 op a2) (a1 op a2 op a3)...
// 4. adjacent_difference()
// 区间1: a1 a2 a3 a4
// 得到序列: a1 (a2 op a1) (a3 op a2).....
void test()
{
vector<int> a{ 1,2,3,4,5,6,7,8,9 };
cout << accumulate(a.begin(), a.end(), 0) << endl;
vector<int> b{ 9,8,7,6,5,4,3,2,1 };
long double m = 1;
cout << inner_product(a.begin(), a.end(), b.begin(), m,multiplies<>(),multiplies<>()) << endl;
vector<int> c;
partial_sum(b.begin(), b.end(), back_inserter(c),multiplies<>());
for (auto &v : c)
cout << v << ends;
cout << endl;
b.resize(0);
adjacent_difference(c.begin(), c.end(), back_inserter(b), minus<>());
for (auto &v : b)
cout << v << ends;
}
int main()
{
test();
system("pause");
return 0;
}