C++ 如何清除streamstring的缓冲区?
我有一个两圈的流线,它烧坏了我的内存。那么,如何正确地清除蒸汽字符串的缓冲区呢?这就像是简化:C++ 如何清除streamstring的缓冲区?,c++,string,visual-studio,buffer,C++,String,Visual Studio,Buffer,我有一个两圈的流线,它烧坏了我的内存。那么,如何正确地清除蒸汽字符串的缓冲区呢?这就像是简化: stringstream ss (stringstream::in | stringstream::out); for() { for() { val = 2; ss << 2; mystring = ss.str(); // my stuff } // Clear the buffer he
stringstream ss (stringstream::in | stringstream::out);
for()
{
for()
{
val = 2;
ss << 2;
mystring = ss.str();
// my stuff
}
// Clear the buffer here
}
stringstream-ss(stringstream::in | stringstream::out);
for()
{
for()
{
val=2;
当你想清除多余的字符时,设置ss.str(“”;
)(编辑:谢谢)
如果流在先前转换过程中设置了任何错误标志,请使用.clear()
。显而易见的解决方案是每次使用新的stringstream
,例如:
for (...) {
std::stringstream ss;
for (...) {
// ...
}
}
这就是stringstream
的设计使用方式。(还有:你知道吗
如果您使用C++0x,您真的想要一个stringstream
,或者只是一个ostringstream
?):
ss.swap(stringstream());
ss.seekp(0);
ss.seekg(0);
ss.str("");
ss.clear();
(SP1)支持它
如果不使用C++0x:
ss.swap(stringstream());
ss.seekp(0);
ss.seekg(0);
ss.str("");
ss.clear();
它不会清除内存,但您可以使用stringstream
对象,因为它以前是空的。我会将stringstream放入循环中。如果我将std::stringstream ss;放入一个循环中,它会在RAM中创建许多ss,并将其烧掉。否?或者它会在循环结束时删除ss,因为它是在循环中创建的?(我觉得这是一个没有问题的问题:)但我是!)它是在程序循环时创建和销毁的。顺便说一句,你说的“烧掉内存”是什么意思?我的应用程序以2Go速度在30秒内增长并崩溃。“它是在程序循环时创建和销毁的”我不知道,我以为它会创建很多ss,它们会在函数/app/object的末尾销毁。谢谢,我在这里用它来更改字符串中的一个浮点数,然后把这个字符串放到另一个大字符串中。这样做最好的方法是什么?如果我把std::stringstream ss;放在一个循环中,它会在RAM中创建很多ss no?std::ostringstream ss;ss这通常是不够的。你也应该使用seekp(0)
和seekg(0)
。@Naszta在设置字符串并清除流之后,我可以不用seekp/seekg
部分来完成它。@jonsca:在这种情况下,这取决于实现。我以前有很多问题。(我开发了多平台,我不记得哪个实现有这个问题)。为了将来的参考,这是在Scott Meyers的C++书籍中(我推荐)。