Je regardais generate()
et generate_n()
dans cppreference et j'essaie de comprendre pourquoi generate()
exige ForwardIterator
, tandis que generate_n()
exige OutputIterator
pour la gamme? (J'ai vérifié le dernier projet de travail de la norme, et c'est la même exigence.)Pourquoi std :: generate() et std :: generate_n() requièrent des itérateurs différents?
Parce que, au moins leurs implémentations possibles semblent exiger des concepts de iterator identiques et OutputIterator
semble être assez:
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 chose avec std::fill()
et std::fill_n()
.