我正在为我一直在研究的字节码语言开发一个虚拟机。我正在使用System.Collections.Generic.Stack
类作为堆栈,但有没有办法分配堆栈大小?或者我只需要编写自己的堆栈对象来使用?
答案 0 :(得分:4)
从MSDN到Stack(Int32)构造函数:
Stack的容量是Stack的元素数量 能把持住。当元素添加到堆栈时,容量为 根据需要通过重新分配内部自动增加 阵列。
如果可以估计集合的大小,请指定初始值 容量消除了执行大量调整大小的需要 向堆栈添加元素时的操作。
通过调用TrimExcess可以减少容量。
这个构造函数是一个O(n)操作,其中n是容量。
答案 1 :(得分:3)
你可以construct it with an initial capacity,但是堆栈会根据需要增长(当你向它添加项目时)。
如果你不希望它在你超过它的容量时自动添加新项目,你需要将它封装在你自己的类中,或者编写你自己的Stack来删除多余的项目。
答案 2 :(得分:2)
您可以使用Stack<T> Constructor (Int32)来指定堆栈的容量:
var stack = new Stack<Foo>(1024);
请注意,如果添加超过1024个项目,堆栈将增加容量。如果您不想这样,可以在每次推送之前检查堆栈大小:
if (stack.Count == 1024)
throw new StackOverflowException();
stack.Push(foo);
答案 3 :(得分:1)
您的术语还有很多不足之处,但Stack
有一个构造函数可以让您传递初始容量:http://msdn.microsoft.com/en-us/library/ahc986x9.aspx
虽然堆栈可以随着内存的增长而自由增长,所以你不必担心!
答案 4 :(得分:1)
答案 5 :(得分:0)
Stack(T)Class
表示可变大小的后进先出(LIFO)集合 相同任意类型的实例。
它动态调整大小。但是,如果您想预先分配其大小,请查看documentation on the Stack's constructor。有一个重载可以设置堆栈的初始大小。