2013-07-19 95 views
7

我有一个stringstream对象,我想知道如何初始化它。如何初始化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 
    } 
+1

你_really_的意思是 “初始化”?当你构造它时,stringstream被初始化。根据定义,一件事物在其生命的后期不能被初始化。你的意思是“重置”? –

+0

yest我的意思是重置 – realtekme

+0

然后编辑你的问题,以表明这一点,请。 –

回答

10

如果你想有一个新的ostringstream对象通过每一次循环中,显而易见的解决办法是声明在循环顶部一个新的。所有的ostream类型都包含很多状态,并且根据上下文,重置所有状态可能或多或少是困难的。

+1

这也意味着它将被更好地封装在循环范围内,这总是很好:)(参见“项目26:尽可能推迟变量定义”。在Scott Meyers的“Effective C++”中 –

0

你的问题有点含糊,但代码示例使它更清晰。

有两个选择:

首先,通过施工initialze 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(); 
} 
+0

清除stream的状态不过是微不足道的:在最普遍的情况下,你还必须重新初始化'fmtflag',精度,填充字符以及由'xalloc'动态分配的任何状态(最后一个非常非常困难)。 –

7

如果你想更换stringstream用别的东西的内容,你可以做到这一点我们采用str()方法。如果你没有任何参数地调用它,它将只是得到的内容(因为你已经在做)。但是,如果你传入一个字符串,那么它将设置为的内容,丢弃之前包含的任何内容。

例如为:

std::stringstream os; 
os.str("some text for the stream"); 

欲了解更多信息,请查看该方法的文档:http://www.cplusplus.com/reference/sstream/stringstream/str