2017-04-19 34 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循环,除了分离的条件输出(比格式化整数并输出这需要零时间)。