(这个问题和std :: max_element为什么需要一个ForwardIterator有相同的"问题模板" ?但答案必须不同,因为std::fill不会将迭代器返回到输出序列.)
std::fill被定义为仅在输出范围由一对ForwardIterators给出时才起作用.但是,表面上类似的std::fill_n工作与OutputIterator很好.
当然算法很简单
template<class OutIt, class T>
void fill(OutIt first, OutIt last, T value)
{
while (first != last) {
*first = value;
++first;
}
}
Run Code Online (Sandbox Code Playgroud)
这个算法怎么样需要ForwardIterator?我错过了什么?
输出迭代器无法比较.的==和!=运营商都没有为输出迭代定义.
你需要一个前向迭代器,因为它
满足输入迭代器的要求
它支持EqualityComparable.
使用输出迭代器,std::fill无法first与last:
while (first != last) {
Run Code Online (Sandbox Code Playgroud)
不支持,用于输出迭代器.
std::fill_n 避免这种比较,它只是使用计数器写入迭代器,所以它只需要一个输出迭代器.