2

我正在为我一直在研究的字节码语言开发一个虚拟机。我正在System.Collections.Generic.Stack为堆栈使用该类,但有什么方法可以分配堆栈大小吗?还是我只需要编写自己的堆栈对象来使用?

4

6 回答 6

4

MSDN获取 Stack(Int32) 构造函数:

Stack 的容量是 Stack 可以容纳的元素数量。随着元素被添加到堆栈中,容量会根据需要通过重新分配内部数组来自动增加。

如果可以估计集合的大小,那么指定初始容量就无需在向 Stack 添加元素时执行许多调整大小的操作。

可以通过调用 TrimExcess 来减少容量。

这个构造函数是一个 O(n) 操作,其中 n 是容量。

于 2011-07-22T17:26:06.160 回答
3

您可以使用初始容量来构建它,但堆栈会根据需要增长(当您向其中添加项目时)。

如果您不希望它在超过其容量时自动添加新项目,则需要将其封装在自己的类中或编写自己的 Stack 以删除多余的项目。

于 2011-07-22T17:26:11.820 回答
2

您可以使用Stack<T> 构造函数 (Int32)来指定堆栈的容量:

var stack = new Stack<Foo>(1024);

请注意,如果添加超过 1024 个项目,堆栈将增加容量。如果你不想这样,你可以在每次推送之前检查堆栈大小:

if (stack.Count == 1024)
    throw new StackOverflowException();
stack.Push(foo);
于 2011-07-22T17:27:42.890 回答
1

您的术语还有很多不足之处,但Stack有一个构造函数允许您传递初始容量:http: //msdn.microsoft.com/en-us/library/ahc986x9.aspx

堆栈可以自由增长,只要你有内存,所以你不需要担心这个!

于 2011-07-22T17:26:20.143 回答
1

你可以 - 见http://msdn.microsoft.com/en-us/library/ahc986x9.aspx

于 2011-07-22T17:26:45.073 回答
0

堆栈(T)类

表示相同任意类型的实例的可变大小后进先出 (LIFO) 集合。

它会动态调整自己的大小。但是,如果您想预先分配它的大小,请查看Stack 的构造函数的文档。有一个重载,您可以使用它设置堆栈的初始大小。

于 2011-07-22T17:26:03.270 回答