[英]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.