我有一个stringstream对象,我想知道如何初始化它。
stringstream os;
for(int i = 0; i < 10; ++i){
value = rand() % 100;
os<<value;
cout<<os.str()<<" "<<os<<endl;
ntree->insert(os.str());
//I want my os object to be initialized here
}
答案 0 :(得分:11)
如果每次循环都需要一个新的ostringstream
对象,显而易见的解决方案是在循环顶部声明一个新对象。所有ostream
类型都包含很多状态,并且根据上下文,重置所有状态可能或多或少都很困难。
答案 1 :(得分:8)
如果您想用其他内容替换stringstream
的内容,可以使用str()
方法执行此操作。如果你在没有任何参数的情况下调用它,它只会获取内容(正如你已经在做的那样)。但是,如果你传入一个字符串,那么它将设置内容,丢弃之前包含的内容。
E.g:
std::stringstream os;
os.str("some text for the stream");
有关详细信息,请查看方法的文档:http://www.cplusplus.com/reference/sstream/stringstream/str
答案 2 :(得分:0)
您的问题有点模糊,但代码示例更清晰。
您有两种选择:
首先,通过构造初始化ostringstream(在循环的每个步骤中构造另一个实例):
for(int i = 0; i < 10; ++i) {
value = rand() % 100 ;
ostringstream os;
os << value;
cout << os.str() << " " << os << endl;
ntree->insert(os.str());
//i want my os object to initializ it here
}
其次,重置内部缓冲区并清除流状态(错误状态,eof标志等):
for(int i = 0; i < 10; ++i) {
value = rand() % 100 ;
os << value;
cout << os.str() << " " << os << endl;
ntree->insert(os.str());
//i want my os object to initializ it here
os.str("");
os.clear();
}