说我有一个数组
array<double>^ buffer = gcnew array<double>(100);
我想要一个像以下那样的函数:
void foo(array<double>^% buffer)
{
Array::Resize(buffer, 10);
}
但是当你想修剪数组时,它不会分配和/或移动&amp; buffer [0]。
答案 0 :(得分:5)
一旦创建,.NET数组的大小就是不可变的。你不能修剪它;你必须重新分配和复制。所以Array.Resize
已经完成了你需要的一切。如果你真的不想这样做,也许只是忽略最后的元素。
或者;使用List<T>
,封装数组, 拥有TrimExcess()
。在C#术语中:
var list = new List<int>(100);
// prints 0/100
Console.WriteLine("{0} / {1}", list.Count, list.Capacity);
list.Add(1);
list.Add(2);
list.Add(3);
// prints 3/100
Console.WriteLine("{0} / {1}", list.Count, list.Capacity);
list.TrimExcess();
// prints 3/3
Console.WriteLine("{0} / {1}", list.Count, list.Capacity);
答案 1 :(得分:3)
你不能在.NET中这样做。 .NET中的数组一旦分配就具有固定大小;你可以改变数组大小的唯一方法是重新分配它(这就是Array.Resize所做的),这将不可避免地改变数组在内存中的位置。