何时应该使用字符串而不是字符串流?

38

我应该在什么情况下使用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个回答

30

我不确定哪种方法更快,但是如果我必须猜的话,我会说你的第二个示例更快,特别是因为你调用了 reserve 成员函数来分配一个大的空间以进行扩展。

如果你只是连接字符串,请使用string::append(或者 string::operator+=)。

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


24

使用string.append会更快,特别是当你reserve的时候。

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

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

这里stringstream会自动将x转换为字符串并将其附加到已有的字符串中,不需要调用atoi函数。 stringstream会自动将所有基本类型转换为字符串,非常适合此目的。

另外,如果你只想将数据放入stringstream中以便稍后将其转换为字符串,则可以使用ostringstream,它是用于输出的。

希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接