Флейм
GameDev.ru / Флейм / Форум / C++03 - удалить из вектора целых элементы меньше 10

C++03 - удалить из вектора целых элементы меньше 10

Поделиться
Страницы: 1 2 314 15 Следующая »
=A=L=X=Постоялецwww4 дек. 201711:23#0
arr.erase( std::remove_if( arr.begin(), arr.end(), std::bind2nd( std::less<int>(), 10 ) ), arr.end() );

+ ранее ошибочно был приведён другой код не соответствующий С++03
+ Показать

Правка: 4 дек. 2017 16:23

=A=L=X=Постоялецwww4 дек. 201711:24#1
P.S.
А на что вы готовы пойти ради STL-correctness?
ud1Постоялецwww4 дек. 201711:28#2
С лямбдами это же уже устарело все?
Panzerschrek[CN]Участникwww4 дек. 201711:35#3
=A=L=X=
> C++03

Изображение

=A=L=X=Постоялецwww4 дек. 201711:39#4
ud1
> С лямбдами это же уже устарело все?
arr.erase(std::remove_if(arr.begin(),arr.end(),std::bind(std::less<int>(),std::placeholders::_1,10)),arr.end());
vs
arr.erase(std::remove_if(arr.begin(),arr.end(),[](int x){return x<10;}),arr.end());

Почти 30 символов экономии.

+ Показать

Правка: 4 дек. 2017 11:39

MAMOHT-92Постоялецwww4 дек. 201711:46#5
=A=L=X=
> Но по моему всё равно выглядит как...
да не, уже вменяемо вроде.
entrywayПостоялецwww4 дек. 201711:52#6
Если учесть, что arr.begin(),arr.end(),[](int x){return x<10;}),arr.end() будут дублироваться в 95% случаев подобного кода, то не особо и вменяемо, больше похоже на синтаксический мусор, первая строчка так вообще.
+ Показать

Правка: 4 дек. 2017 12:00

kiparПостоялецwww4 дек. 201712:14#7
+ Показать
OgraПостоялецwww4 дек. 201712:23#8
+ Показать

Правка: 4 дек. 2017 12:23

MAMOHT-92Постоялецwww4 дек. 201712:31#9
+ Показать
ZegalurПостоялецwww4 дек. 201712:38#10
+ Показать
=A=L=X=Постоялецwww4 дек. 201712:39#11
А ведь это на собеседовании можно прямо таки делать "еврейской задачей" (tm).
Соискатель если написал через STL как в первопосте - говоришь ну и уродливая же и непонятная простыня - нам такие бредописатели в команде не нужны.
А если напишет через цикл без STL - говоришь, что он явно не знает STL и такие индусы нам тут в команде не нужны.
А тебе просто рожа у него не нравится и всё тут - выход есть!
SuslikМодераторwww4 дек. 201712:39#12
=A=L=X=
если это всё равно никто читать не будет, то можно как угодно. если людям потом с этим кодом жить, то только так:
  for(auto it = vec.begin(); it != vec.end();)
  {
    if(*it < 10)
      it = vec.erase(it);
    else
      it++;
  }
MAMOHT-92Постоялецwww4 дек. 201712:42#13
Suslik
можно цикл на while заменить и условие упростить.
kiparПостоялецwww4 дек. 201712:43#14
Suslik
у первопоста линейная сложность, а у тебя квадратичная.
Страницы: 1 2 314 15 Следующая »

/ Форум / Флейм / Программирование

2001—2017 © GameDev.ru — Разработка игр