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

c – 为什么std :: fill使用ForwardIterator而不是OutputIterator?,第1张

概述(这个问题与 Why does std::max_element require a ForwardIterator?具有相同的“问题模板”,但答案必须不同,因为std :: fill不会将迭代器返回到输出序列中.) std::fill定义为仅在输出范围由一对ForwardIterators给出时才起作用.但是,表面上类似的std::fill_n与OutputIterator一起工作正常. 当然算 (这个问题与 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不能先与last进行比较:

while (first != last) {

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

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

总结

以上是内存溢出为你收集整理的c – 为什么std :: fill使用ForwardIterator而不是OutputIterator?全部内容,希望文章能够帮你解决c – 为什么std :: fill使用ForwardIterator而不是OutputIterator?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1217673.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存