【问题标题】: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。

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2012-06-07
        • 1970-01-01
        • 2013-04-24
        • 2011-11-18
        • 1970-01-01
        • 2020-08-27
        • 2011-06-11
        • 2014-06-10
        • 1970-01-01
        相关资源
        最近更新 更多