构造用于追加的字符串

时间:2017-06-01 09:47:14

标签: c++ c++11

我必须通过连接其他一些字符串来构造一个字符串。我也知道字符串的最大大小,我想保留容量,所以没有重新分配。我的代码现在看起来像这样:

#include <string>
using std::string;

// Setup
...

string a,b,c;

// Strings are filled with relevant data
...

string msg;
msg.reserve(200);
msg = "A=";  msg += a; msg += ',';
msg += "B="; msg += b; msg += ',';
msg += "C="; msg += c; msg += '.';

我之前使用过stringstream,但性能却慢了两倍。 有没有办法在构造时保留字符串容量,而不是必须分配两次内存?还有更好(更快)的方法来附加字符串吗?

1 个答案:

答案 0 :(得分:2)

  

有没有办法在构造时保留字符串容量而不必分配内存两次?

此处没有“分配内存两次”。您正确创建一个字符串然后要求它保留一些内存。除了保留更准确的金额(而不仅仅是猜测200),你没事。

从技术上讲,an implementation is allowed to start off with an unspecified capacity,但您可能会看到小字符串优化的结果(std::string内部的静态分配缓冲区,以避免在某些情况下的动态分配)比使用这个功能。

如果您真的关心它,可以用200 \0个字符实例化字符串,然后将它们全部删除;那么它的潜在能力将是一致的。