2012-08-25 67 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来输出。

我希望有帮助。

相关问题