【发布时间】:2017-07-22 11:44:53
【问题描述】:
我在 cppreference 中查看generate() 和generate_n() 并试图理解为什么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() 也是如此。
【问题讨论】:
标签: c++ iterator language-lawyer