-5

所以问题是这样的,我们有一个数组,我们应该做两种类型的操作:

1) 在段 [x,y] 上添加值 v,

2) 在段 [x,y] 上求和

我正在寻找答案,但找不到任何东西,如果您有任何有用的链接或建议,我将不胜感激。

4

1 回答 1

0

这两种赋值都可以通过使用标准算法和 lambda 表达式来完成,或者实际上是通过使用基于范围的 for 语句来完成的。

使用算法和 lambda 表达式的方法

#include <algorithm>

std::for_eqch( std::begin( a ), std:;end( a ),
               [=]( int &z ) { if ( x <= z && z <= y ) z += v; } );

#include <numeric>

int sum = std::accumulate( std::begin( a ), std::edn( a ), 0,
                           [=]( int acc, int z ) { return acc + ( x <= z && z <= y ? z : 0 ); } );

使用基于范围的方法

for ( int &z : a )
{
   if ( x <= z && z <= y ) z += v;
}

int sum = 0;

for ( int z : a )
{
   if ( x <= z && z <= y ) sum += z;
}

事实上,您可以使用任何形式的循环来完成分配。:)

于 2014-03-11T19:19:14.763 回答