C++ 中的 std:: 字符串连接

问题描述 投票:0回答:1

C++中

std::string
串联的原理是什么?它在内存分配方面如何工作?

我在探索 Java 中的 leetcode 卡时发现:
“串联的工作原理是首先为新字符串分配足够的空间,复制旧字符串的内容并附加到新字符串”
与 Java 不同,“C++ 中没有明显的性能影响”

由于动态数组的工作原理,我认为在 C++ 中也是一样的。我记得如果你想增加动态数组的容量,程序首先创建一个新的空间,其大小等于所需的大小,然后将旧数组的所有元素复制到新数组。

c++ string dynamic-memory-allocation string-concatenation theory
1个回答
0
投票

原则上,C++ 中的

std::string
连接的工作原理与您在 Java 中读到的类似:
您需要有足够的可用空间,然后将要连接的 2 个字符串的内容复制到其中。

但是 - 尽管标准没有强制要求,但大多数(如果不是全部)标准库实现

std::string
都包含一种称为 小字符串优化 的机制。如果字符串内容足够小,它可以通过直接在
std::string
对象中嵌入一小段字符来避免动态分配字符串内容。
请注意,“足够”取决于实现。

这意味着,如果您连接 2 个足够小的字符串 sch,结果仍然足够小 - 不会进行动态分配。

但是您仍然需要将两个字符串的内容复制到结果中。

© www.soinside.com 2019 - 2024. All rights reserved.