我已经尝试了几件事,
std::stringstream m; m.empty(); m.clear();
两者都不起作用 .
对于所有标准库类型,成员函数 empty() 是查询,而不是命令,即它意味着"are you empty?"不是"please throw away your contents" .
empty()
clear() 成员函数继承自 ios ,用于清除流的错误状态,例如:如果文件流的错误状态设置为 eofbit (文件结束),则调用 clear() 会将错误状态设置回 goodbit (无错误) .
clear()
ios
eofbit
goodbit
要清除 stringstream 的内容,请使用:
stringstream
m.str("");
是正确的,虽然使用:
m.str(std::string());
在技术上更有效,因为你避免调用 std::string 构造函数来获取 const char* . 但是现在任何编译器都应该能够在两种情况下生成相同的代码 - 所以我会选择任何更具可读性的代码 .
std::string
const char*
您可以清除错误状态并在一行中清空strignstream
std::stringstream().swap(m); // swap m with a default constructed stringstream
这有效地将m重置为默认构造状态
似乎工作 .
无论编译器如何,这应该是最可靠的方式:
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小时的试用和错误以及谷歌搜索),顺便说一句,使用每一行都不会做到这一点 .
//clear the stringstream variable sstm.str(""); sstm.clear(); //fill up the streamstream variable sstm << "crap" << "morecrap";
这是一个概念性问题 .
Stringstream是一个流,所以它的迭代器是前向的,不能返回 . 在输出字符串流中,您需要flush()来重新初始化它,就像在任何其他输出流中一样 .
这些不会丢弃gnu c中stringstream中的数据
m.str(""); m.str() = ""; m.str(std::string());
以下为我清空stringstream:
m.str().clear();
8 回答
对于所有标准库类型,成员函数
empty()
是查询,而不是命令,即它意味着"are you empty?"不是"please throw away your contents" .clear()
成员函数继承自ios
,用于清除流的错误状态,例如:如果文件流的错误状态设置为eofbit
(文件结束),则调用clear()
会将错误状态设置回goodbit
(无错误) .要清除
stringstream
的内容,请使用:是正确的,虽然使用:
在技术上更有效,因为你避免调用
std::string
构造函数来获取const char*
. 但是现在任何编译器都应该能够在两种情况下生成相同的代码 - 所以我会选择任何更具可读性的代码 .您可以清除错误状态并在一行中清空strignstream
这有效地将m重置为默认构造状态
似乎工作 .
无论编译器如何,这应该是最可靠的方式:
我总是在考虑它:
我的2美分:
这似乎对我在xcode和dev-c中起作用,我有一个菜单形式的程序,如果根据用户的请求迭代执行将填充一个stringstream变量,这将在第一次代码时正常工作运行,但下次用户运行相同的代码时不会清除字符串流 . 但是下面的两行代码最后在填充字符串变量之前每次清除stringstream变量 . (2小时的试用和错误以及谷歌搜索),顺便说一句,使用每一行都不会做到这一点 .
这是一个概念性问题 .
Stringstream是一个流,所以它的迭代器是前向的,不能返回 . 在输出字符串流中,您需要flush()来重新初始化它,就像在任何其他输出流中一样 .
这些不会丢弃gnu c中stringstream中的数据
以下为我清空stringstream: