[英]STL fill and forward iterator
根据大多数C ++引用,例如cplusplus.com, 前向迭代器不需要可赋值(我的意思是,引用左值)。 但是,对于需要写入值的几个STL算法,例如std::fill
(也是std::generate
等),规范使用了前向迭代器:
template <class ForwardIterator, class T>
void fill (ForwardIterator first, ForwardIterator last, const T& val);
而等效行为需要左值取消引用:
template <class ForwardIterator, class T>
void fill (ForwardIterator first, ForwardIterator last, const T& val)
{
while (first != last) {
*first = val;
++first;
}
}
因此,它实际上是使用一个可变的前向迭代器和一次传递。
现在的问题是:
(1)为什么不明确这些情况下使用的前向迭代器是否可变?
(2) 更新 :我发现以下问题是愚蠢的:我暂时忘记了输出迭代器不需要支持相等比较。 无论如何,上述问题仍然存在。
为什么使用正向迭代器而不是std::fill
, std::generate
等的输出迭代器,而实际上它们不需要多次传递? (例如, std::copy
只需要输出迭代器。基本原理是什么?)
考虑到fill
的规范是(解除引用的)迭代器可以从T
赋值,它对我来说似乎并不十分奇怪。 输出迭代器是不够的,因为它无法与确定范围结束相比,因此选择了具有需求的forward_iterator
。
您将注意到fill_n
确实使用输出迭代器,因为不需要迭代器比较来确定要填充的序列的结尾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.