我正在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();
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
与std::fill()和相同的故事std::fill_n().