你如何清除一个stringstreamvariables?
我已经尝试了几件事情,
std::stringstream m; m.empty(); m.clear();
两者都不起作用。
对于所有的标准库types,成员函数empty()
是一个查询,而不是一个命令,即它意味着“你是空的吗? 不是“请扔掉你的内容”。
clear()
成员函数从ios
inheritance,用于清除stream的错误状态,例如,如果文件stream的错误状态设置为eofbit
(文件结束),则调用clear()
将设置错误状态回到goodbit
(没有错误)。
清除stringstream
的内容,使用:
m.str("");
是正确的,虽然使用:
m.str(std::string());
在技术上更高效,因为你避免了调用const char*
的std::string
构造const char*
。 但是现在任何编译器都应该能够在这两种情况下生成相同的代码 – 所以我只会去更可读的东西。
m.str("");
似乎工作。
无论编译器如何,这应该是最可靠的方法:
m=std::stringstream();
您可以清除错误状态并在一行中清空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 ++中适用于我,我有一个菜单forms的程序,如果按照用户的请求迭代执行,将会填满一个streamtringvariables,在第一次代码会运行但不会清除下一次用户将运行相同的代码的stringstream。 但是下面的两行代码最终在填充stringvariables之前每次清除了stringstreamvariables。 (2小时的反复试验和谷歌search),顺便说一句,使用每一行自己不会做的伎俩。
//clear the stringstream variable sstm.str(""); sstm.clear(); //fill up the streamstream variable sstm << "crap" << "morecrap";
这是一个概念问题。
Stringstream是一个stream,所以它的迭代器是前向的,不能返回。 在输出串stream中,您需要一个flush()来重新初始化它,就像在其他输出stream中一样。
这些不会放弃gnu c ++中的stringstream中的数据
m.str(""); m.str() = ""; m.str(std::string());
以下为我清空stringstream:
m.str().clear();