Проверяющие адреса электронной почты не действительно очень полезны так или иначе. Это не найдет общие опечатки или искусственные адреса электронной почты, так как они имеют тенденцию синтаксически походить на допустимые адреса.
, Если Вы хотите быть уверенными, адрес допустим, у Вас нет выбора, кроме как отправить почту подтверждения.
, Если Вы просто хотите быть уверенными, что вводы данных пользователем что-то, что похоже на электронное письмо, а не просто "asdf", затем проверьте на. Более сложная проверка действительно не предоставляет преимущества.
(я знаю, это не отвечает на Ваши вопросы, но я думаю, что это стоит упомянуть так или иначе)
Согласно "Языку программирования C ++" Страуструпа, это было просто упущением.
(как цитата, ответ на тот же вопрос в списках рассылки boost: copy_if )
Страуструп говорит, что они забыли об этом. Это в C ++ 11.
Однако вы можете использовать remove_copy_if
(который действительно должен называться copy_if_not
) вместе с not1
вместо этого.
Многочисленные источники указывают , что он был исключен из STL случайно.
Однако я не уверен, является ли это фактом или самовоспроизводящимся миф. Буду признателен, если кто-нибудь укажет на источник более надежный, чем ссылка на случайное сообщение в Интернете.
Очень легко написать свой собственный:
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;
}