Сообщение Re: Может я чего-то не понимаю.... от 25.07.2023 23:27
Изменено 25.07.2023 23:29 rg45
Re: Может я чего-то не понимаю....
Здравствуйте, B0FEE664, Вы писали:
BFE>Немного удивившись такому решению, быстрым поиском нашёл похожее у MS здесь
BFE>Почему так сложно? Ведь задача решается в одну строчку:
BFE>
BFE>Или так нельзя?
Ну, во-первых, правильно выше подсказывают, здесь не хватает вызова erase. И если его добавить, то твоя строчка становится чуть длиннее:
Во-вторых, по условию задачи результат нужно было сложить в другой массив, а ты удаляешь прямо в исходном.
Ну и в-третьих, а чем, в данном случае, хуже "лобовое" решение с использованием обычного цикла?
BFE>Немного удивившись такому решению, быстрым поиском нашёл похожее у MS здесь
BFE>Почему так сложно? Ведь задача решается в одну строчку:
BFE>
BFE>std::remove_if(numbers_in.begin(), numbers_in.end(), [](int& x){ const int s = x; x /= 2; return (s%2)==1; } );
BFE>
BFE>Или так нельзя?
Ну, во-первых, правильно выше подсказывают, здесь не хватает вызова erase. И если его добавить, то твоя строчка становится чуть длиннее:
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());
Во-вторых, по условию задачи результат нужно было сложить в другой массив, а ты удаляешь прямо в исходном.
Ну и в-третьих, а чем, в данном случае, хуже "лобовое" решение с использованием обычного цикла?
for(auto&& x : numbers_in) if (!x % 2) numbers_out.push_back(x / 2);
Re: Может я чего-то не понимаю....
Здравствуйте, B0FEE664, Вы писали:
BFE>Немного удивившись такому решению, быстрым поиском нашёл похожее у MS здесь
BFE>Почему так сложно? Ведь задача решается в одну строчку:
BFE>
BFE>Или так нельзя?
Ну, во-первых, правильно выше подсказывают, здесь не хватает вызова erase. И если его добавить, то твоя строчка становится чуть длиннее:
Во-вторых, по условию задачи результат нужно было сложить в другой массив, а ты удаляешь прямо в исходном. Или ты собираешься сперва скопировать все содержимое, а потом уже удалять? Это вообще не спортивно.
Ну и в-третьих, а чем, в данном случае, хуже "лобовое" решение с использованием обычного цикла?
BFE>Немного удивившись такому решению, быстрым поиском нашёл похожее у MS здесь
BFE>Почему так сложно? Ведь задача решается в одну строчку:
BFE>
BFE>std::remove_if(numbers_in.begin(), numbers_in.end(), [](int& x){ const int s = x; x /= 2; return (s%2)==1; } );
BFE>
BFE>Или так нельзя?
Ну, во-первых, правильно выше подсказывают, здесь не хватает вызова erase. И если его добавить, то твоя строчка становится чуть длиннее:
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());
Во-вторых, по условию задачи результат нужно было сложить в другой массив, а ты удаляешь прямо в исходном. Или ты собираешься сперва скопировать все содержимое, а потом уже удалять? Это вообще не спортивно.
Ну и в-третьих, а чем, в данном случае, хуже "лобовое" решение с использованием обычного цикла?
for(auto&& x : numbers_in) if (!x % 2) numbers_out.push_back(x / 2);