什么时候应该使用string而不是stringstream?

时间:2012-08-25 03:22:15

标签: c++ string performance iostream stringstream

我应该何时使用stringstream代替string::append()? 假设我将仅仅连接字符串。

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

或者:

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

哪一个更快?

2 个答案:

答案 0 :(得分:19)

我不知道哪一个会更快,但如果我不得不猜测我会说你的第二个例子,特别是因为你已经调用了reserve成员函数来分配一个大的空间来扩展

如果您只使用string::append(或string::operator+=)连接字符串。

如果您要将数字转换为字符串表示形式,并在转换过程中对其进行格式化,然后将转换结果附加在一起,请使用字符串流。我明确提到了格式化部分,因为如果你不需要格式化C ++ 11提供std::to_string,它可以用来将数字类型转换为字符串。

答案 1 :(得分:17)

string.append要快得多。特别是当你保留。

如果你只连接字符串,我会使用string.append。我只需要在需要自动将非字符串转换为字符串时使用stringstream,例如:

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

此处stringstream自动将x转换为字符串并附加它。我不需要打电话给atoi。 Stringstream将自动为您转换所有基本类型。它非常适合这个目的。

此外,如果您只是将数据引导到stringstream中以便稍后将其转换为字符串。您可以使用ostringstream作为输出。

我希望有所帮助。