【问题标题】:When should I use string instead of stringstream?什么时候应该使用字符串而不是字符串流?
【发布时间】:2012-08-20 13:53:13
【问题描述】:
什么时候应该使用stringstream 而不是string::append()?
假设我要连接字符串。
stringstream ss;
ss << str1 << "str2" << ...
Write(ss.str());
或者:
string str;
str.reserve(10000);
str.append(str1);
str.append("str2");
...
Write(str);
哪个更快?
【问题讨论】:
标签:
c++
string
performance
iostream
stringstream
【解决方案1】:
我不知道哪个会更快,但如果我不得不猜测我会说你的第二个例子是,特别是因为你调用了 reserve 成员函数来分配一个大的扩展空间。
如果您只是连接字符串,请使用string::append(或string::operator+=)。
如果您要将数字转换为其字符串表示形式,并在转换期间对其进行格式化,然后将转换结果附加在一起,请使用字符串流。我明确提到了格式化部分,因为如果你不需要格式化,C++11 提供了std::to_string,它可用于将数字类型转换为字符串。
【解决方案2】:
string.append 要快得多。尤其是预订时。
如果你只连接字符串,我会使用 string.append。我只会在需要自动将非字符串转换为字符串时使用 stringstream,例如:
const int x(42);
stringstream ss;
ss << "My favorite number is: " << x << std::endl;
这里 stringstream 自动将 x 转换为字符串并附加它。我不需要打电话给atoi。 Stringstream 将自动为您转换所有基本类型。非常适合这个目的。
此外,如果您只是将数据定向到字符串流以稍后将其转换为字符串。您可以使用用于输出的 ostringstream。
希望对你有帮助。