От: | B0FEE664 | ||
Дата: | 25.07.23 22:15 | ||
Оценка: |
Допустим, есть вектор с целыми числами, и требуется поделить все его числа на два. Те, которые не делятся, нужно просто выкинуть. Это несложно написать циклом, но для выразительности воспользуемся алгоритмами:
std:vector<int> numbers_in;
std:vector<int> numbers_out;
// задача: поделить на 2 все чётные числа из numbers_in
// и записать результаты numbers_out
std:vector<int> intermediate;
// скопируем в intermediate только чётные числа
std::copy_if(numbers_in.begin(), numbers_in.end(),
std::back_inserter(intermediate),
[](int x) {
return x % 2 == 0;
}
);
// поделим их на 2
std::transform(intermediate.begin(), intermediate.end(),
std::back_inserter(numbers_out),
[](int x) {
return x / 2;
}
)
std::remove_if(numbers_in.begin(), numbers_in.end(), [](int& x){ const int s = x; x /= 2; return (s%2)==1; } );
numbers_in.erase(std::remove_if(numbers_in.begin(), numbers_in.end(), [](int& x){ const int s = x; x /= 2; return (s%2)==1; } ), numbers_in.end());