2011-03-13 68 views
73
 
    ostringstream s; 

    s << "123"; 
    cout << s.str().c_str() << endl; 

    // how to clear ostringstream here? 
    s << "456"; 
    cout << s.str().c_str() << endl; 

输出是:如何清除ostringstream

 
123 
123456 

我需要:

 
123 
456 

如何重置ostringstream,从而获得所需的输出?

回答

161
s.str(""); 
s.clear(); 

第一行是要求将字符串重置为空;第二行需要清除可能设置的错误标志。如果您知道没有设置错误标志,或者您不在意重置它们,那么您无需致电clear()

通常,它只是使用新的std::ostringstream对象而不是重用现有对象,除非代码在已知性能热点中使用,否则它更简单,更简洁,更直接(直接转发器?)。

+3

+1每次创建一个新流。流可以有很多内部状态。重置所有这些至少需要与流构造器一样多的代码。 – 2011-03-13 07:47:57

+2

这个答案值得一看:http://stackoverflow.com/a/624291/142239 – 2013-10-09 03:35:22

+0

相关的问题:当在循环中声明时,ostringstream会在每次迭代中被破坏和构造,或者我需要使用这种方法?例如,for(int i = 0; i <100; ++ i){std :: ostringstream foo; foo <<“bar”; std :: cout << foo.str()<<“”;}'。请问这个打印:'酒吧酒吧[...]'或'酒吧吧酒吧吧[...]''? – 2013-11-02 15:42:40