如何清除streamtring的缓冲区?

时间:2011-06-16 10:17:35

标签: c++ visual-studio string buffer clear

我有一个两个循环的流串,它正在烧我的RAM。那么如何正确清除steamstring的缓冲区呢?这就是简化:

stringstream ss (stringstream::in | stringstream::out);

for()
{
    for()
    {
        val = 2;
        ss << 2;
        mystring = ss.str();
        // my stuff
    }
    // Clear the buffer here
}

它写了2然后22然后222 ...我试过.clear()或.flush()但不是那样的。那我该怎么做?

3 个答案:

答案 0 :(得分:7)

显而易见的解决方案是每次使用新的stringstream,例如:

for (...) {
    std::stringstream ss;
    for (...) {
        //  ...
    }
}

这是stringstream设计使用的方式。 (还有:你呢 真的想要一个stringstream,或只是一个ostringstream?)

答案 1 :(得分:6)

如果要清除多余的字符,请设置ss.str("");(编辑:谢谢)。

如果您的信息流在之前的转换过程中设置了任何错误标记,请使用.clear()

答案 2 :(得分:3)

如果使用C ++ 0x:

ss.swap(stringstream());

Visual Studio 2010(SP1)支持它。

如果您不使用C ++ 0x:

ss.seekp(0);
ss.seekg(0);
ss.str("");
ss.clear();

它不会清除内存,但您可以使用stringstream对象,因为它之前是空的。