gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:09:44 26 4
gpt4 key购买 nike

(此问题与 Why does std::max_element require a 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;
}
}

这个算法需要ForwardIterator怎么办?我错过了什么?

最佳答案

输出迭代器不可比较。 ==!= 运算符没有为输出迭代器定义。

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

satisfies the requirements of an input iterator

它支持EqualityComparable

对于输出迭代器,std::fill 无法将firstlast 进行比较:

while (first != last) {

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

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

关于c++ - 为什么 std::fill 使用 ForwardIterator 而不是 OutputIterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43507846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com