如果我对深浅复制的理解是正确的,那么我的问题是不可能的。如果你有一个数组(a[10])并执行一个浅拷贝(b[20]),这不是不可能的,因为 b 中的数据不是连续的吗?
如果我完全错了,有人可以建议一种快速的方法来模仿(在 c# 中)c++ 执行 realloc 以调整数组大小的能力。
注意
我正在查看 System.Array 对象的 .Clone() 和 .Copy() 成员。
如果我对深浅复制的理解是正确的,那么我的问题是不可能的。如果你有一个数组(a[10])并执行一个浅拷贝(b[20]),这不是不可能的,因为 b 中的数据不是连续的吗?
如果我完全错了,有人可以建议一种快速的方法来模仿(在 c# 中)c++ 执行 realloc 以调整数组大小的能力。
注意
我正在查看 System.Array 对象的 .Clone() 和 .Copy() 成员。
您无法调整现有数组的大小,但是,您可以使用:
Array.Resize(ref arr, newSize);
这会分配一个新数组,将旧数组中的数据复制到新数组中,然后更新arr
变量(在这种情况下是通过-ref 传递的)。你是这个意思吗?
但是,仍然指向旧数组的任何其他引用都不会更新。更好的选择可能是使用List<T>
- 然后您不需要手动调整它的大小,并且您不会遇到过时引用的问题。你只是Add
/Remove
等等。一般来说,你不会经常直接使用数组。它们有其用途,但它们不是默认情况。
重新发表您的意见;
List<T>
不拳击。这是关于泛型的要点之一;在引擎盖下,List<T>
是一个包装器T[]
,所以 aList<int>
有一个int[]
- 没有拳击。较旧的ArrayList
是一个包装器object[]
,所以盒子也是如此;当然,拳击并不像你想象的那么糟糕。Array.Resize
;T
,然后用于Buffer.BlockCopy
blit 内容List<T>
通常会更简单(并且更快,除非您基本上重新实现List<T>
重新备用容量以最小化调整大小的数量)。