【问题标题】:How to clear ostringstream [duplicate]如何清除ostringstream [重复]
【发布时间】:2011-07-14 08:49:51
【问题描述】:
ostringstream s; s

输出是:

123 123456

我需要:

123 456

如何重置 ostringstream 以获得所需的输出?

【问题讨论】:

    标签: c++ stream


    【解决方案1】:
    s.str("");
    s.clear();
    

    需要第一行将字符串重置为空;第二行需要清除可能设置的任何错误标志。如果你知道没有设置错误标志或者你不关心重置它们,那么你不需要调用clear()

    通常使用新的std::ostringstream 对象而不是重用现有对象更容易、更简洁、更直接(直截了当?),除非代码用于已知的性能热点。

    【讨论】:

    • +1 用于每次创建新的流。流可以有很多内部状态。重置所有这些至少需要与流构造函数一样多的代码。
    • 这个答案也值得一看:stackoverflow.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);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2015-10-03
    • 1970-01-01
    • 2020-11-22
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多