Почему нет никакого станд.:: алгоритм copy_if?

Проверяющие адреса электронной почты не действительно очень полезны так или иначе. Это не найдет общие опечатки или искусственные адреса электронной почты, так как они имеют тенденцию синтаксически походить на допустимые адреса.

, Если Вы хотите быть уверенными, адрес допустим, у Вас нет выбора, кроме как отправить почту подтверждения.

, Если Вы просто хотите быть уверенными, что вводы данных пользователем что-то, что похоже на электронное письмо, а не просто "asdf", затем проверьте на. Более сложная проверка действительно не предоставляет преимущества.

(я знаю, это не отвечает на Ваши вопросы, но я думаю, что это стоит упомянуть так или иначе)

63
задан Naveen 19 September 2009 в 15:53
поделиться

4 ответа

Согласно "Языку программирования C ++" Страуструпа, это было просто упущением.

(как цитата, ответ на тот же вопрос в списках рассылки boost: copy_if )

41
ответ дан 24 November 2019 в 16:25
поделиться

Страуструп говорит, что они забыли об этом. Это в C ++ 11.

Однако вы можете использовать remove_copy_if (который действительно должен называться copy_if_not ) вместе с not1 вместо этого.

27
ответ дан 24 November 2019 в 16:25
поделиться

Многочисленные источники указывают , что он был исключен из STL случайно.

Однако я не уверен, является ли это фактом или самовоспроизводящимся миф. Буду признателен, если кто-нибудь укажет на источник более надежный, чем ссылка на случайное сообщение в Интернете.

7
ответ дан 24 November 2019 в 16:25
поделиться

Очень легко написать свой собственный:

template <class InputIterator, class OutputIterator, class Predicate>
OutputIterator copy_if(InputIterator first, InputIterator last,
                       OutputIterator result, Predicate pred)
{
  return std::remove_copy_if(first,last,result,std::not1(pred));
}

Изменить: Эта версия работает со всеми предикатами:

template <class InputIterator, class OutputIterator, class Predicate>
OutputIterator copy_if(InputIterator first, InputIterator last,
                       OutputIterator result, Predicate pred)
{
  while(first!=last)
  {
    if(pred(*first))
        *result++ = *first;
    ++first;
  }
  return result;
}
7
ответ дан 24 November 2019 в 16:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: