如何清除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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

mysql gh-ost导致自增id重复

如何将ostringstream直接写入cout

如何在 C++11 中将自定义分配器传递给 std::basic_ostringstream?

ost文件如何在outlook中打开

单击按钮时如何清除画布[重复]

std::ostringstream输出流详解