Создать массив на основе старого

Помогите с задачей на c++. Сформировать новый массив из элементов одного знака, число которых больше. Если в массиве одинаковое число положительных и отрицательных элементов, то новый массив не создавать.


Ответы (1 шт):

Автор решения: Georgy Firsov
std::vector<int> initial = { ... };

auto is_negative = [](int value) { return value < 0; };
auto is_positive = [](int value) { return value > 0; };

size_t negative_count = std::count_if(
    initial.cbegin(),
    initial.cend(),
    is_negative
);

size_t positive_count = std::count_if(
    initial.cbegin(),
    initial.cend(),
    is_positive
);

std::vector<int> result{};

if (positive_count > negative_count)
{
    std::copy_if(
        initial.cbegin(),
        initial.cend(),
        std::back_inserter(result),
        is_positive
    );
}
else if (negative_count > positive_count)
{
    std::copy_if(
        initial.cbegin(),
        initial.cend(),
        std::back_inserter(result),
        is_negative
    );
}
→ Ссылка