c – STL填充和转发迭代器

c – STL填充和转发迭代器,第1张

概述根据大多数C引用,例如cplusplus.com, forward iterators不需要可赋值(我的意思是,参考左值).但是,对于需要写入值的几个STL算法,例如 std::fill(也是std :: generate等),规范使用了前向迭代器: template <class ForwardIterator, class T> void fill (ForwardIterator fir 根据大多数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只需要输出迭代器.基本原理是什么?)

解决方法 从签名
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填充和转发迭代器所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/langs/1240623.html

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

发表评论

登录后才能评论

评论列表(0条)

保存