template<typename Input, typename Pred>
typename iterator_traits<Input>::difference_type
count_if(Input first, Input last, Pred pred);
template<typename InputIt, typename Op>
Op for_each(InputIt first, InputIt last, Op op);
template<typename InputIt, typename OutputIt, typename Op>
OutputIt transform(InputIt first, InputIt last, OutputIt result, Op op);
template<typename ForwardIt, typename Gen>
void generate(ForwardIt first, ForwardIt last, Gen gen);
template<typename InputIt, typename OutputIt, typename T>
OutputIt remove_copy(InputIt first, InputIt last, OutputIt result, const T& val);
template<typename InputIt, typename OutputIt, typename Pred>
OutputIt remove_copy_if(InputIt first, InputIt last, OutputIt result, Pred pred);