Я уже пробовал несколько вещей,
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*
. Но любой компилятор в эти дни должен иметь возможность генерировать один и тот же код в обоих случаях - поэтому я бы просто пошел с тем, что более читаемо.
Вы можете очистить состояние ошибки и очистить поток строк в одну строку
std::stringstream().swap(m); // swap m with a default constructed stringstream
Это эффективно сбрасывает m в состояние по умолчанию
m.str("");
похоже, работает.
Это должно быть самым надежным способом независимо от компилятора:
m=std::stringstream();
Я всегда смотрю на это:
{
std::stringstream ss;
ss << "what";
}
{
std::stringstream ss;
ss << "the";
}
{
std::stringstream ss;
ss << "heck";
}
мои 2 цента:
мне показалось, что это работает для меня в xcode и dev-c ++, у меня была программа в виде меню, которое при многократном выполнении по запросу пользователя будет заполнять переменную stringstream, которая будет нормально работать в первый раз, когда код выполнить, но не очистит поток строк в следующий раз, когда пользователь запустит тот же код. но две строки кода ниже, наконец, очищают переменную stringstream каждый раз перед заполнением строковой переменной. (2 часа проб и ошибок и поиски в Google), между прочим, использование каждой строки само по себе не сработает.
//clear the stringstream variable
sstm.str("");
sstm.clear();
//fill up the streamstream variable
sstm << "crap" << "morecrap";
Это концептуальная проблема.
Stringstream - это поток, поэтому его итераторы вперед, не могут вернуться. В выходном строковом потоке вам понадобится flush(), чтобы повторно инициализировать его, как и в любом другом выходном потоке.
Они не отбрасывают данные в строковом потоке в gnu С++
m.str("");
m.str() = "";
m.str(std::string());
Следующее освобождает строку string для меня:
m.str().clear();