2013-07-19 96 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