#include <algorithm>
#include <numeric>
#include <iostream>
#include <iterator>
#include <locale>
#include <boost/lambda/lambda.hpp>
namespace lm=boost::lambda;
/*
в одномерном массиве, состоящем из n вещественных элементов, вычислить:
сумму модулей элементов массива, расположенных после первого отрицательного элемента.
Сжать массив, удалив из него все элементы, величина которых находится в интервале [a,b].
Освободившихся в конце массива элементы заполнить нулями.
*/
int main()
{
setlocale(LC_ALL, "");
const size_t N = 10;
double arr[N] = {1.0, -2.0, -3.0, 4.0, 5.0, -6.0, 7.0, -8.0, -9.0, 10.0};
typedef std::ostream_iterator<double> O;
typedef std::allocator<double>::pointer iterator;
// сумму модулей элементов массива, расположенных после первого отрицательного элемента.
iterator neg = std::find_if(arr, arr+N, lm::_1 < 0.0);
if (neg != arr+N)
{
const double sum = std::accumulate(++neg, arr+N, 0.0);
std::cout << sum << std::endl;
}
// Сжать массив, удалив из него все элементы, величина которых находится в интервале [a,b].
// Освободившихся в конце массива элементы заполнить нулями.
const double A = -3.0;
const double B = 5.0;
std::fill(
std::remove_if(arr, arr+N, lm::_1 >= A && lm::_1 <= B),
arr+N, 0.0);
std::copy(arr, arr+N, O(std::cout, " "));
std::cout << std::endl;
return 0;
}