所以问题就像这样,我们有一个数组,我们应该做两种类型的操作:
1)在段[x,y]
上添加值v2)在段[x,y]上找到总和
我正在寻找答案,却找不到任何答案,如果您有任何有用的链接或建议,我将不胜感激。
答案 0 :(得分: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;
}
事实上,您可以使用任何形式的循环来执行分配。:)