2017-04-19 33 views
0

我剛剛學會了如何今天使用ostream_iterator,但我不知道這是否比正常的for-loop方法更有效。ostream_iterator是否有效?

下面是代碼:

//The first one 
vector<int> v = {1, 2, 3, 4, 5}; 
ostream_iterator<int> osit(cout, " "); 
copy(v.begin(), v.end(), osit); 

而且

//The second one 
vector<int> v = {1, 2, 3, 4, 5}; 
for (int i : v) cout << i << " "; 

哪一個更有效?

預先感謝您!

+3

大部分時間使用流是低效的,特別是當你與底層系統交互時('cout' /'cin' /'fstream'/...),所以你不會看到兩者之間的區別這些方法的「效率」將被流的低效率所掩蓋。 – Holt

+1

基於範圍的for循環需要稍微少一些的輸入。 –

+0

定義「高效」。通過一些措施(如鍵入字符的數量),第二個可能更有效。其他人(例如,不止一次使用同一個'ostream_iterator',輸出int的多個向量的能力),第一個可能是。如果您的度量是CPU週期或內存使用量,那麼結果取決於編譯器的質量和標準庫的編碼。所以,真正的答案是「取決於」。 – Peter

回答

1

std::copy正在使用來自迭代器的operator=。它看起來是這樣的

ostream_iterator& operator=(const _Ty& _Val) 
{ // insert value into output stream, followed by delimiter 
    *_Myostr << _Val; 
    if (_Mydelim != 0) 
    { 
     *_Myostr << _Mydelim; 
    } 

    return (*this); 
} 

看起來非常相似,你有你的代碼for循環,除了分離的條件輸出(比格式化整數並輸出這需要零時間)。