How to clear the buffer of a streamstring?

2019-06-25 05:37发布

I have a streamstring in two loops and it is burning my RAM. So how to clear properly the buffer of a steamstring? It is like that to simplify :

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

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

It wrote 2 then 22 then 222... I tried .clear() or .flush() but it is not that. So how I do this?

3条回答
等我变得足够好
2楼-- · 2019-06-25 06:20

Set ss.str(""); when you want to clear out the excess characters (Edit: thank you).

Use .clear() if your stream has set any error flags in the process of the prior conversion.

查看更多
神经病院院长
3楼-- · 2019-06-25 06:31

If you use C++0x:

ss.swap(stringstream());

Visual Studio 2010 (SP1) supports it.

If you don't use C++0x:

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

It won't clear the memory, but you could use your stringstream object as it would be empty before.

查看更多
ゆ 、 Hurt°
4楼-- · 2019-06-25 06:36

The obvious solution is to use a new stringstream each time, e.g.:

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

This is the way stringstream was designed to be used. (Also: do you really want a stringstream, or just an ostringstream?)

查看更多
登录 后发表回答