8 ответов:
для всех стандартных типов библиотек функция-член
empty()это запрос, а не команда, т. е. это означает "вы пусты?"не" пожалуйста, выбросьте свое содержимое".The
clear()функция-член наследуется отiosи используется для очистки состояния ошибки потока, например, если файловый поток имеет состояние ошибки, установленное вeofbit(конец файла), то вызовclear()установит состояние ошибки обратно вgoodbit(нет ошибок).для очистки содержимого a
stringstreamиспользуется:m.str("");правильно, хотя с помощью:
m.str(std::string());технически более эффективно, потому что вы избегаете вызова
std::stringконструктор, который принимаетconst char*. Но любой компилятор в эти дни должен иметь возможность генерировать один и тот же код в обоих случаях - поэтому я бы просто пошел с тем, что более читаемо.
вы можете очистить состояние ошибки и очистить strignstream все в одной строке
std::stringstream().swap(m); // swap m with a default constructed stringstreamэто эффективно сбрасывает m в созданное по умолчанию состояние
Я всегда рассматриваю его:
{ std::stringstream ss; ss << "what"; } { std::stringstream ss; ss << "the"; } { std::stringstream ss; ss << "heck"; }
мои 2 цента:
это, казалось, работало для меня в Xcode и dev-C++, то у меня была программа в виде меню, что если выполняется итеративно в соответствии с запросом пользователя пополнит stringstream переменной, которая будет работать нормально в первый раз код выполняется, но не понятно в stringstream в следующий раз, когда пользователь будет запускать один и тот же код. но две строки кода ниже, наконец, очистили переменную stringstream каждый раз перед заполнением строковой переменной. (2 часа проб и ошибок и поисков google), кстати, используя каждую строку самостоятельно не будет делать трюк.
//clear the stringstream variable sstm.str(""); sstm.clear(); //fill up the streamstream variable sstm << "crap" << "morecrap";
это концептуальная проблема.
Stringstream-это поток, поэтому его итераторы вперед, не может вернуться. В выходном потоке строк вам нужен flush () для его повторной инициализации, как и в любом другом выходном потоке.
Они не отбрасывают данные в потоке строк в gnu c++
m.str(""); m.str() = ""; m.str(std::string());следующее делает пустой stringstream для меня:
m.str().clear();
Comments