2011-07-22 156 views
2

我正在爲我一直在研究的字節碼語言開發虛擬機。我正在使用System.Collections.Generic.Stack類的堆棧,但有什麼辦法來分配堆棧的大小?或者我只需要編寫自己的堆棧對象來使用?在C#中分配堆棧大小?

回答

0

堆棧(T)類

表示可變大小後進先出相同的任意類型的 實例(LIFO)集合。

它自動調整它的大小。但是如果你想預先分配它的大小,那麼看看documentation on the Stack's constructor。有一個過載,您可以設置堆棧的初始大小。

4

MSDN從爲堆棧(的Int32)構造:

堆棧的容量是元素堆棧 可以容納的數目。當元素被添加到堆棧時,根據重新分配內部 陣列的需要自動增加容量 。

如果可以估計集合的大小,那麼指定初始容量將消除在向堆棧添加元素時執行大量操作的需要。

通過調用TrimExcess可以減少容量。

此構造函數是一個O(n)操作,其中n是容量。

3

你可以construct it with an initial capacity,但堆棧會根據需要增加(當你添加項目到它)。

如果您不希望它在您將容器推過容器時自動添加新項目,則需要將其封裝在自己的類中,或者編寫自己的堆棧以移除多餘的項目。

+0

有大約MaxStack 有限制的文章。它用一個鏈表實現。詳情在這裏:http://msdn.microsoft.com/en-us/library/ahc986x9。aspx –

+0

@Jason:這是正常的堆棧 - 它可以讓你添加超出容量(並且增長到補償) –

+0

我只是鏈接到某人根據你的評論創建的實現「如果你不想它自動添加新當你將它推過容量時,你需要......編寫你自己的堆棧,以移除多餘的物品。「 –

2

可以使用Stack<T> Constructor (Int32)到specifiy堆棧容量:

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

請注意,如果您添加超過1024項堆將增長的能力。如果你不想這樣,你可以在每個推前檢查堆棧大小:

if (stack.Count == 1024) 
    throw new StackOverflowException(); 
stack.Push(foo);