首先包含#include<numeric>
然后看看代码:
1.先看看累加
void main()
{
//1.默认累加
std::vector<int> a(100000, 1);
a[2] = 2;
a[3] = 2;
a[4] = 3;
clock_t t1 = clock();
int nsum = accumulate(begin(a), end(a), 0);//0 +1+2+3+4+5+6+7+0+0+0+0...
clock_t t2 = clock();
cout << "nsum:" << nsum << " time:"<<t2-t1<<endl;
int nsum2 = accumulate(begin(a), end(a), 10);//10 +1+2+3+4+5+6+7+0+0+0+0...
cout << "nsum2:"<<nsum2 << endl;
int nsum3 = 0;
clock_t t3 = clock();
for (int i = 0; i < 100000; i++)
{
nsum3 += a[i];
}
clock_t t4 = clock();
cout << "nsum3:" << nsum3 << " time:" << t4 - t3 << endl;
system("pause");
}
结果:
从结果可以看出使用accumulate的算法比传统循环累加需要的时间少。所以推介使用但仅是容器的情况下快,我在测试普通数组的时候,反而循环更快。
2.累减
int nsum4 = accumulate(begin(a), end(a), 0,minus<int>());//0-1-1-1-1-1-...
cout << "num4:"<<nsum4 << endl;
int nsum5 = accumulate(begin(a), end(a), 5, minus<int>());//5-1-1-1-1-1-...
cout << "num5:" << nsum5 << endl;
结果:
3.自定义累加规则
int nsum6 = accumulate(begin(a), end(a), 0, [](int x, int y){return x + 2 * y; });//0-1-1-1-1-1-...
cout << "num6:" << nsum6 << endl;
int nsum7 = accumulate(begin(a), end(a), 2, [](int x, int y){return x + 2 * y; });//0-1-1-1-1-1-...
cout << "num7:" << nsum7 << endl;
结果: