2012-08-25 116 views
18

什麼時候應該使用stringstream而不是string::append()? 假設我只是將字符串鏈接起來。什麼時候應該使用字符串而不是stringstream?

stringstream ss; 
ss << str1 << "str2" << ... 
Write(ss.str()); 

或者:

string str; 
str.reserve(10000); 
str.append(str1); 
str.append("str2"); 
... 
Write(str); 

當中哪些是更快?

回答

17

我不知道哪一個會更快,但是如果我不得不猜測我會說你的第二個例子,尤其是因爲你已經調用了reserve成員函數來分配一個大的擴展空間。

如果您只串聯字符串,請使用string::append(或string::operator+=)。

如果您要將數字轉換爲其字符串表示形式,並在轉換過程中對其進行格式設置,然後將轉換結果附加在一起,請使用stringstreams。我明確提到了格式化部分,因爲如果不需要格式化,C++ 11提供了可用於將數字類型轉換爲字符串的std::to_string

14

string.append要快得多。特別是當你保留。

如果你只連接字符串,我會使用string.append。當我需要自動非字符串轉換爲字符串,例如我只會用字符串流:

const int x(42); 
stringstream ss; 
ss << "My favorite number is: " << x << std::endl; 

這裏stringstream的自動轉換X爲一個字符串,並附加它。我不需要致電atoi。 Stringstream會自動爲您轉換所有基本類型。這對於這個目的很好。

此外,如果您只是將數據導入到stringstream中以稍後將其轉換爲字符串。你可以使用ostringstream來輸出。

我希望有幫助。

相關問題