为什么std :: fill使用ForwardIterator而不是OutputIterator?

Quu*_*one 3 c++ iterator stl

(这个问题和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?我错过了什么?

Sam*_*hik 7

输出迭代器无法比较.的==!=运营商都没有为输出迭代定义.

你需要一个前向迭代器,因为它

满足输入迭代器的要求

它支持EqualityComparable.

使用输出迭代器,std::fill无法firstlast:

while (first != last) {
Run Code Online (Sandbox Code Playgroud)

不支持,用于输出迭代器.

std::fill_n 避免这种比较,它只是使用计数器写入迭代器,所以它只需要一个输出迭代器.