给定一个任意的 float ,比如说-0.13
,假设我们有一个算法可以为这个数字一个一个地计算一个已知长度L
的二进制字符串,从左到右。
(我需要做这个计算来计算粒子的 Morton Key 排序(给定的坐标),这反过来用于构建八叉树。我正在创建 每个 x、y、z 维度的二进制字符串)
首先创建长度为 L
的字符数组,然后将此数组转换为字符串是否更好/更有效?即
char ch[L];
for(i = 0; i < L; ++i)
{
// calculation of ch[i]
}
//convert array into string
或者从一个空字符串开始,然后将一个新的计算位连接到字符串中是否更好/更有效。即
string s = "";
for(i = 0; i < L; ++i)
{
// calculation of ch[i]
s = s + string(ch);
}
最佳答案
为什么不两者都做呢?
std::string myStr(L);
for(i = 0; i < L; ++i)
{
// calculation of ch[i]
myStr[i] = ch;
}
这将创建一个具有给定大小的 std::string
。然后你只需设置每个字符。这将仅在您可以事先准确知道大小的情况下起作用。
或者,如果您想要安全的东西,即使您必须添加超过 L
个字符:
std::string myStr;
myStr.reserve(L);
for(i = 0; i < L; ++i)
{
// calculation of ch[i]
myStr.push_back(ch);
}
std::string::reserve
预分配存储空间,但 push_back
将在需要时分配更多空间。如果您不超过 L
个字符,那么您将只会获得一个初始分配。
关于c++ - 字符串连接 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7327070/