我应该在什么情况下使用stringstream
而不是string::append()
?假设我只是将字符串连接起来。
stringstream ss;
ss << str1 << "str2" << ...
Write(ss.str());
或者:
string str;
str.reserve(10000);
str.append(str1);
str.append("str2");
...
Write(str);
它们两个哪个更快?
我应该在什么情况下使用stringstream
而不是string::append()
?假设我只是将字符串连接起来。
stringstream ss;
ss << str1 << "str2" << ...
Write(ss.str());
或者:
string str;
str.reserve(10000);
str.append(str1);
str.append("str2");
...
Write(str);
它们两个哪个更快?
我不确定哪种方法更快,但是如果我必须猜的话,我会说你的第二个示例更快,特别是因为你调用了 reserve
成员函数来分配一个大的空间以进行扩展。
如果你只是连接字符串,请使用string::append
(或者 string::operator+=
)。
如果你要将数字转换为其字符串表示形式,并在转换过程中进行格式化,然后将转换结果拼接在一起,请使用stringstreams。我明确提到格式化部分,因为如果你不需要格式化,C++11 提供了 std::to_string
,可用于将数值类型转换为字符串。
使用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,它是用于输出的。
希望这能帮到你。