Как очистить буфер от потоковой строки? - PullRequest
4 голосов
/ 16 июня 2011

У меня есть потоковая строка в двух циклах, и она сжигает мою оперативную память.Так как же очистить буфер паровой строки?Это так для упрощения:

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 ]

7 голосов
/ 16 июня 2011

Очевидное решение состоит в том, чтобы использовать каждый раз новый stringstream, например ::10000 *

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

Это способ, которым stringstream был разработан для использования. (Также: вы действительно хотите stringstream или просто ostringstream?)

6 голосов
/ 16 июня 2011

Установите ss.str("");, если вы хотите удалить лишние символы (Редактировать: спасибо).

Используйте .clear(), если ваш поток установил какие-либо флаги ошибок в процессе предыдущего преобразования.

3 голосов
/ 16 июня 2011

Если вы используете C ++ 0x:

ss.swap(stringstream());

Visual Studio 2010 (SP1) поддерживает его.

Если вы не используете C ++0x:

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

Это не очистит память, но вы можете использовать свой объект stringstream, поскольку он был бы пустым раньше.

...