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只需要输出迭代器.基本原理是什么?)
解决方法 从签名template <class ForwardIterator,class T>voID fill (ForwardIterator first,const T& val);
你不能推断出ForwardIterator是forward iterator中描述的迭代器.但是,如果你读了参数描述,你会发现第一个和最后一个必须是
07001 to the initial and final positions in a sequence of elements that support being assigned a value of type T.
(我强调).因此,一个前向迭代器只能满足前向迭代器的要求,它不是一个有效的参数.
总结以上是内存溢出为你收集整理的c – STL填充和转发迭代器全部内容,希望文章能够帮你解决c – STL填充和转发迭代器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)