Я уже пробовал несколько вещей,
std::stringstream m;
m.empty();
m.clear();
оба из которых не работают.
источник
Я уже пробовал несколько вещей,
std::stringstream m;
m.empty();
m.clear();
оба из которых не работают.
Для всех стандартных типов библиотек функция-член empty()
является запросом, а не командой, то есть она означает "ты пустой?" не "пожалуйста, выбросьте свое содержимое".
Функция- clear()
член наследуется от ios
и используется для очистки состояния ошибки потока, например, если файловый поток имеет состояние ошибки, установленное в eofbit
(конец файла), то при вызове clear()
будет возвращено состояние ошибки goodbit
(без ошибок) ,
Для очистки содержимого stringstream
, используя:
m.str("");
правильно, хотя с использованием:
m.str(std::string());
технически более эффективен, потому что вы избегаете вызова std::string
конструктора, который принимает const char*
. Но любой компилятор в наши дни должен иметь возможность генерировать один и тот же код в обоих случаях - так что я бы просто пошел с тем, что более читабельно.
Вы можете очистить состояние ошибки и очистить поток строк в одну строку
Это эффективно сбрасывает m в состояние по умолчанию
источник
похоже на работу.
источник
Это должно быть самым надежным способом независимо от компилятора:
источник
mm.clear(); mm.str("");
сделали свое дело. (нет C ++ 11, иначе обмен был бы лучше).swap
лучше, чем задание на переезд?Я всегда смотрю на это:
источник
stringstream?
мои 2 цента:
мне показалось, что это работает для меня в xcode и dev-c ++, у меня была программа в форме меню, которое при многократном выполнении по запросу пользователя будет заполнять переменную stringstream, которая будет нормально работать в первый раз, когда код выполнить, но не очистит поток строк в следующий раз, когда пользователь запустит тот же код. но две строки кода ниже, наконец, очищают переменную stringstream каждый раз перед заполнением строковой переменной. (2 часа проб и ошибок и поиск в Google), между прочим, использование каждой строки самостоятельно не поможет.
источник
Это концептуальная проблема.
Stringstream является потоком, поэтому его итераторы являются прямыми и не могут возвращаться. В выходном потоке строк вам потребуется flush () для его повторной инициализации, как и в любом другом выходном потоке.
источник
Они не отбрасывают данные в потоке строк в gnu c ++
Следующее очищает поток строк для меня:
источник