我必须通过连接其他一些字符串来构造一个字符串。我也知道字符串的最大大小,我想保留容量,所以没有重新分配。我的代码现在看起来像这样:
#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
,但性能却慢了两倍。
有没有办法在构造时保留字符串容量,而不是必须分配两次内存?还有更好(更快)的方法来附加字符串吗?
答案 0 :(得分:2)
有没有办法在构造时保留字符串容量而不必分配内存两次?
此处没有“分配内存两次”。您正确创建一个字符串然后要求它保留一些内存。除了保留更准确的金额(而不仅仅是猜测200
),你没事。
从技术上讲,an implementation is allowed to start off with an unspecified capacity,但您可能会看到小字符串优化的结果(std::string
内部的静态分配缓冲区,以避免在某些情况下的动态分配)比使用这个功能。
如果您真的关心它,可以用200 \0
个字符实例化字符串,然后将它们全部删除;那么它的潜在能力将是一致的。