Итак, проблема состоит в следующем: у нас есть массив, и мы должны выполнить 2 типа операций:
1) Добавление значения v на сегменте [x, y]
2) Нахождение суммы на отрезке [x, y]
Я искал ответ, но ничего не мог найти, если у вас есть полезные ссылки или советы, я буду благодарен.
Оба назначения могут быть выполнены с использованием стандартных алгоритмов и лямбда-выражений или, что фактически эквивалентно использованию диапазона, основанного на выражении.
Подход с использованием алгоритмов и лямбда-выражений
#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;
}
На самом деле вы можете использовать любую форму цикла для выполнения заданий. 🙂
Других решений пока нет …