【发布时间】:2015-08-04 15:28:48
【问题描述】:
{
std::string s = "this is a string ";
std::string res = std::string();
int sLength = s.length();
for(int i = 0; i < sLength; i++)
res += s[i];
}
我想这个 C++ 的复杂度是严格线性的(关于字符分配),而不是 C# 中等价物的二次复杂度。
但是,在这种情况下,没有预先分配内存,我们实际上是否也在考虑二次复杂度?如果是,分配一个 char 数组是否有助于我们实现线性复杂度?
【问题讨论】:
-
我不确定我是否理解您的问题?您是否认为每个连接都会强制分配另一个
size = previous_size + 1?这不是它的工作原理。 -
1.字符串生成器。 2. 在 C# 中,这将占用相同数量的内存。 GC 会吃掉所有的额外分配
-
@CoryKramer 我至少认为这是一种可能性。
-
@AK_ 所以你说 C++ 和 C# 的实现都是二次的。
-
@Franklin No. 两者都是线性的。出于不同的原因。