根据大多数 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)更新:我发现下面的问题很愚蠢:我暂时忘记了输出迭代器不需要支持相等比较。无论如何,上述问题仍然存在。
为什么使用前向迭代器而不是输出迭代器 forstd::fill
等std::generate
,而它们实际上并不需要多次传递?(std::copy
例如,只需要输出迭代器。理由是什么?)