Просматривая книгу «Эффективный STL», автор приводит пример того, как можно записать copy_if
, так как это не существует в стандартных алгоритмах. Вот версия Авторы:Шаблоны в C++ и стандартный алгоритм
template <typename Input, typename Output,typename Predicate>
OutputIterator copy_if(Input begin , Input end, Output destBegin, Predicate p)
{
while(begin != end)
{
if(p(*begin)) *destBegin++=*begin;
++ begin;
}
return destBegin;
}
Теперь мой вопрос, как автор может использовать этот метод, как это:
copy_if(widg.begin(),widg.end(),ostream_iterator<widg>(cerr,"\n"),isDefective);
Мой вопрос, почему разве параметры шаблона определяется с copy_if (так как она требует 3) такие, как этот
copy_if<p1,p2,p3>(...)
'станд :: copy_if' существует. Это было не так, когда была написана книга. – chris
Как вы можете написать 'std :: cout << std :: endl', а не' std :: operator <<< std :: ostream & (*) (std :: ostream *)> (std :: cout, std: : епсИ) '? –
@KerrekSB - один из лучших примеров. Многие люди не знают, что такое 'std :: endl' и почему' << 'работает, если вы не используете' using namespace std'. Два примера «расширенного» поведения/функций C++ в самой распространенной/простой исходной строке C++. – Manu343726