【问题标题】:How much space does a Vector of 1 element take up?1 个元素的 Vector 占用多少空间?
【发布时间】:2012-12-02 10:47:49
【问题描述】:

这是一个比较笼统的问题,但我不知道不同编程语言的空间是否不同,所以我用 actionscript-3 标记了它。在很多情况下,我需要一个通常包含 1 个元素的向量,但有时可能更多。例如,如果我使用 int 与 1 int 的向量相比,我会节省多少内存?假设我有一个函数可以对向量中的所有数字执行某些操作。输入通常是单个 int,但有时我可能需要更多。向量的大小也是固定的,所以我不可能将 1 元素向量变成 2 元素向量。

现在我可以做两件事:

1) 我只能使用向量并且只有一个函数可以接收向量,或者

2) 我可以定义 1 个接收单个 int 的函数和另一个执行相同操作但接收 int 向量的函数。

或者我可以让它接受任何类型的参数,检查输入的类型,然后将其转换为整数或向量?基本上,我应该制作 2 个函数来满足这两种情况,还是只制作 1 个只使用向量的函数?

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    好的,因为它并没有真正适用,所以删除了旧示例。

    如果未提前指定向量的大小,则当向量空间不足时,大小会增加。每次向量的大小增加时,都会分配一个新的内存块。因此,通过不预先定义向量的大小,内存占用正是存储一个 int 所需的。

    因此,仅基于此创建一个课程并不是一个坏主意。但是现在您需要查看这一切的 OOP。因此,如果您的大多数锁都有一把钥匙,那么大多数时候您真的不需要访问 lock.keys[0] 尤其是即使知道您需要这样做,您仍然需要一些指示器,它只需要并且需要并且拥有一把钥匙。 lock.lockType 或 lock.requiredNumKeys 或两者兼而有之。由于所有这些逻辑和属性都特定于您需要多个键的罕见情况,所以我说...

    构建 2 个类。

    编辑:

    我想我会提到的一件事是在使用两个类时,您可能在某些时候需要一个数组或锁集合。使这两个类都实现和接口,例如定义函数 addKey() 和 get isLocked() 的 IKeyedLock 这样您就可以列出所有 IKeyedLocks,但是 SingleKeyLock 和 MultiKeyLock 类确定它们是否仍然被锁定以及如何添加一个(或多个)键

    【讨论】:

    • 如果第二个函数不能访问第一个函数怎么办?考虑一下我所说的 int 实际上是某个类的成员的情况,我必须为带有向量的情况创建另一个类。如果我只使用向量,我可以只使用 1 个类,但现在我必须制作 2 个。这 2 个类似乎以某种方式连接,但我不知道如何。带有向量的类不需要继承额外的int,我真的不知道我是否可以将它们组合在一起。我只是找不到一个好的解决方案。
    • 好的,所以在试图理解这个问题时,我看到了两种可能性。 1)您正在谈论用户可能玩游戏 0、1 或多次的游戏的“completionTimes”之类的属性。在这种情况下,使用 100% 矢量路线,并且属性中可能有也可能没有值。 2) 如果必须将它们分开,则使用 IntUtil.doSomethingToAVecotrOfInts() 和 IntUtil.doSomethingToAnInt() 之类的静态方法。这样您就可以导入该类并在需要时使用它的静态方法(并且这两个函数始终可用)。
    • 我不知道你所说的“completionTimes”是什么意思,但如果我将函数设为静态,我需要将它的类自己的成员传递回类。例如,我有一个锁,它有一个整数键作为成员。它有一个功能可以检查输入是否是键,如果是则打开。现在,考虑一个多钥匙锁,它需要多把钥匙才能打开。一旦创建,单键锁不会更改为多键锁。我通常会使用 1 把钥匙锁,但有时我需要一把多钥匙锁。我可以让它们成为 2 个单独的类,或者只有一个类 MultiKeyLock。
    • 好的...我将完全编辑我的第一个答案,因为我第一次回答时并不清楚场景。
    • ok 更新了答案,因为我更好地理解了你的问题
    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    相关资源
    最近更新 更多