Je regardais generate()
et generate_n()
dans cppreference et essaie de comprendre pourquoi est - generate()
besoin ForwardIterator
, alors que generate_n()
exige OutputIterator
pour la gamme? (J'ai vérifié la dernière ébauche de la Norme, et c'est la même exigence.)
Parce que, au moins leurs implémentations possibles semblent exiger identiques concepts d'itérateur et OutputIterator
semble être suffisant:
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;
}
Même histoire avec std::fill()
et std::fill_n()
.