根据大多数C引用,例如cplusplus.com,forward iterators不需要可赋值(我的意思是,参考左值).但是,对于需要写入值的几个STL算法,例如
std::fill
(也是std :: generate等),规范使用了前向迭代器:
template <class ForwardIterator,class T> void fill (ForwardIterator first,ForwardIterator last,const T& val);
而等效行为需要左值取消引用:
template <class ForwardIterator,const T& val) { while (first != last) { *first = val; ++first; } }
所以,它实际上是使用一个带有单个传递的可变前向迭代器.
现在的问题是:
(1)为什么不明确这些情况下使用的前向迭代器是否可变?
(2)更新:我发现以下问题是愚蠢的:我暂时忘记输出迭代器不需要支持相等比较.无论如何,上述问题仍然存在.
为什么使用正向迭代器而不是std :: fill,std :: generate等的输出迭代器,而实际上它们不需要多次传递? (例如,std :: copy只需要输出迭代器.基本原理是什么?)
解决方法
原文地址:https://www.jb51.cc/c/118913.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。