Я смотрел generate()
и generate_n()
в cppreference и пытаюсь понять, почему generate()
требует ForwardIterator
, тогда как generate_n()
требует OutputIterator
для диапазона? (Я проверил последний рабочий проект стандарта, и это то же требование.)
Поскольку, по крайней мере, их возможные реализации, похоже, требуют идентичных концепций итератора, а OutputIterator
кажется достаточно:
generate()
:
template<class ForwardIt, class Generator>
void generate(ForwardIt first, ForwardIt last, Generator g)
{
while (first != last) {
*first++ = g();
}
}
generate_n()
:
template<class OutputIt, class Size, class Generator>
OutputIt generate_n(OutputIt first, Size count, Generator g)
{
for (Size i = 0; i < count; i++) {
*first++ = g();
}
return first;
}
Такая же история с std::fill()
и std::fill_n()
.