如何清除ostringstream [重复]
Posted
技术标签:
【中文标题】如何清除ostringstream [重复]【英文标题】:How to clear ostringstream [duplicate] 【发布时间】:2011-07-14 08:49:51 【问题描述】: ostringstream s; s输出是:
123 123456我需要:
123 456如何重置 ostringstream 以获得所需的输出?
【问题讨论】:
【参考方案1】:s.str("");
s.clear();
需要第一行将字符串重置为空;第二行需要清除可能设置的任何错误标志。如果你知道没有设置错误标志或者你不关心重置它们,那么你不需要调用clear()
。
通常使用新的std::ostringstream
对象而不是重用现有对象更容易、更简洁、更直接(直截了当?),除非代码用于已知的性能热点。
【讨论】:
+1 用于每次创建新的流。流可以有很多内部状态。重置所有这些至少需要与流构造函数一样多的代码。 这个答案也值得一看:***.com/a/624291/142239 相关问题:在循环中声明时,ostringstream会在每次迭代时被破坏和构造,还是我需要使用这种方法?例如,for (int i=0; i<100; ++i) std::ostringstream foo; foo << "bar"; std::cout << foo.str() << " ";
。是否会打印:bar bar bar [...]
或 bar barbar barbarbar [...]
?
@ThanasisPapoutsidakis 是的,范围 将在每次迭代后销毁循环中的任何局部变量,因此每个 foo 都是一个全新的实例。 STL 实现是否会有一个内部缓存来重用旧字符串流和其他类型的内存?这些天可能不是因为一切都是多线程优化,例如这样和写时复制(COW)不太有用。
#define sstr(x) (oss.str(""),oss.clear(),oss << x, oss.str())
允许使用简洁的代码(用于测试用例等):name=sstr("pow" << i << ":" << j);
以上是关于如何清除ostringstream [重复]的主要内容,如果未能解决你的问题,请参考以下文章