根據大多數C++引用,例如cplusplus.com,forward iterators不需要是可分配的(我的意思是,推定爲左值)。然而,對於需要編寫值幾個STL算法,例如std::fill
(也std::generate
等),該規範使用前向迭代:STL填充和轉發迭代器
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
只需要輸出迭代,比如,什麼道理呢?)
'前向迭代器不需要可分配',你是如何確定的?我很確定他們是可分配的。 – 2013-04-29 23:57:44
@JesseGood出於實用目的,它們幾乎總是可分配的,但如果您閱讀了參考文獻http://cplusplus.com/reference/iterator/ForwardIterator/?kw=forward%20iterator,則不是。 – 4ae1e1 2013-04-30 00:01:17
@JesseGood我也在SO上發現了這個:http://stackoverflow.com/questions/14058642/are-forward-iterators-output-iterators – 4ae1e1 2013-04-30 00:03:11