2012-12-02 62 views
1

這更像是一個普遍的問題,但我不知道不同編程語言的空間是否不同,所以我用actionscript-3標記了它。我有很多實例,我需要一個通常爲1個元素的向量,但可能更多次。例如,如果我使用int而不是1 int的向量,我可以節省多少內存?假設我有一個函數可以對矢量中的所有數字執行一些操作。輸入通常是單個int,但有時我可能需要更多。矢量的大小也是固定的,所以我沒有機會將1個元素的矢量變成2個元素。Vector元素佔用多少空間?

現在我可以做兩兩件事:

1)我只能用向量和有一個函數,它在一個載體上,或者

2)我可以定義1個函數,它在單個int另一個函數可以完成同樣的事情,但可以接受int的Vector。

或者我可能會採取任何類型的參數,檢查輸入的類型,然後將其轉換爲整數或向量?基本上,我應該製作迎合兩種情況的2個函數還是僅使用矢量的1個函數?

回答

1

確定拿出了舊的例子,因爲它並沒有真正適用。

如果矢量的大小未提前指定,則大小會在矢量空間不足時增大。每次向量的大小增加時,都會分配一個新的內存塊。所以,通過不預先定義向量的大小,內存佔用就是存儲一個int所需要的。

因此,僅僅基於這一點,製作一個班級並不是一個壞主意。但是現在你需要看看所有的OOP。因此,如果大多數鎖具有一個密鑰,那麼在大多數情況下,您確實不需要訪問lock.keys [0],特別是即使您知道需要這樣做,仍然需要一些它只需要的指示符,而且需要並擁有一把鑰匙。 lock.lockType或lock.requiredNumKeys或兩者。由於所有這些邏輯和屬性都是特定於罕見時間,所以您需要多個鍵,我說...

構建2個類。

編輯:

一件事,我想我會提的是在使用兩班,你可能會在某個時候要鎖定陣列或收藏。使這兩個類的實現和接口像IKeyedLock定義一個函數addKey(),也許一個get isLocked()這樣你可以有一個列表將所有IKeyedLocks,但SingleKeyLock和MultiKeyLock類決定不同,如果他們仍然鎖定或不是,以及如何添加一個鍵(或多個鍵)

+0

如果第二個功能不能訪問第一個功能,該怎麼辦?考慮一下我所說的int實際上是某個Class的成員,並且我必須爲這個vector創建另一個Class。如果我只使用矢量,我只能使用1個類,但現在我必須使2個。這2個類似乎以某種方式連接,但我不知道如何。帶有向量的類不需要繼承額外的int,我真的不知道我是否可以將它們組合在一起。我無法找到一個好的解決方案。 – Meteorites

+0

好的,所以在試圖理解這個問題時,我看到了兩種可能性。 1)你正在談論一個像「completionTimes」這樣的屬性,用戶可能玩過遊戲0,1次或多次的遊戲。在這種情況下,請使用100%矢量路線,並且該屬性可能有也可能沒有值。 2)如果必須將它們分開,請使用類似於IntUtil.doSomethingToAVecotrOfInts()和IntUtil.doSomethingToAnInt()的靜態方法。通過這種方式,您可以導入該類,並在需要時使用它的靜態方法(並且這兩個函數始終可用)。 –

+0

我完全不知道「completionTimes」是什麼意思,但是如果我讓這個函數成爲靜態的,我需要將它自己的類自己的成員傳遞給類。比方說,例如,我有一個Lock,它有一個整數鍵作爲成員。它有一個函數,用於檢查輸入是否是鍵,如果是鍵則打開。現在,考慮一個多鑰匙鎖,它需要打開多個鑰匙。創建完成後,單鍵鎖定不會更改爲多鍵鎖定。我通常會使用1個鑰匙鎖,但有時我需要一個多鑰匙鎖。我可以讓他們2個獨立的類,或者只有一個類MultiKeyLock。 – Meteorites

相關問題