C++中
std::string
串联的原理是什么?它在内存分配方面如何工作?
我在探索 Java 中的 leetcode 卡时发现:
“串联的工作原理是首先为新字符串分配足够的空间,复制旧字符串的内容并附加到新字符串”。
与 Java 不同,“C++ 中没有明显的性能影响”。
由于动态数组的工作原理,我认为在 C++ 中也是一样的。我记得如果你想增加动态数组的容量,程序首先创建一个新的空间,其大小等于所需的大小,然后将旧数组的所有元素复制到新数组。
原则上,C++ 中的
std::string
连接的工作原理与您在 Java 中读到的类似:但是 - 尽管标准没有强制要求,但大多数(如果不是全部)标准库实现
std::string
都包含一种称为 小字符串优化 的机制。如果字符串内容足够小,它可以通过直接在 std::string
对象中嵌入一小段字符来避免动态分配字符串内容。这意味着,如果您连接 2 个足够小的字符串 sch,结果仍然足够小 - 不会进行动态分配。
但是您仍然需要将两个字符串的内容复制到结果中。