2012-12-02 77 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