问题实际上是您不提前知道完整大小,因此您无法适当地分配内存。我希望您获得的性能影响与此有关,而不是与string
s 连接的方式有关,因为它在标准库中有效地完成了。
因此,我建议推迟连接,直到您知道 final 的完整大小string
。也就是说,您首先将所有字符串存储在一个大vector
文件中:
using namespace std;
vector<string> allLines;
size_t totalSize = 0;
// If you can have access to the total size of the data you want
// to read (size of the input file, ...) then just initialize totalSize
// and use only the second code snippet below.
for (string line; getline(cin, line); )
{
allLines.push_back(line);
totalSize += line.size();
}
然后,您可以string
提前知道它的大小来创建您的大:
string finalString;
finalString.reserve(totalSize);
for (vector<string>::iterator itS = allLines.begin(); itS != allLines.end(); ++itS)
{
finalString += *itS;
}
不过,我应该提一下,只有在遇到性能问题时才应该这样做。不要尝试优化不需要的东西,否则会使程序复杂化而没有明显的好处。我们需要优化的地方通常是违反直觉的,并且可能因环境而异。因此,只有在您的分析工具告诉您需要时才这样做。