【发布时间】:2011-09-05 03:04:39
【问题描述】:
我正在寻找类似于 STL 向量但可以处理例如 12、16、20、24、32 和 40 位长的整数。 vector<uint16_t> 和 vector<uint32_t> 很好地处理了 16 位和 32 位的情况,但我还没有找到任何方法来处理其他情况。请注意,采用这种方式的全部目的是节省内存和带宽,因此不能选择填充。
我的数据结构可以推断出整数的最高有效位(即 int64),因此我只想存储 LSB。每个整数的位数和整数数量在创建时是已知的,但在编译时是未知的。理想情况下,每整数位数可以是 12 到 40 之间的任何值,但出于性能原因或使用需要在编译时设置每整数位数的结构,层是可以的。
vector<bool> 和 dynamic_bitset 可以创建位域,但仅限于 1 位整数。有谁知道其他的吗?
【问题讨论】:
-
您需要自己进行移位和屏蔽。
-
@Henning,我有一个原型系统可以做到这一点,但我试图避免重新发明轮子。我还注意到,在这里获得良好的性能是一件棘手的事情,所以已经调整过的东西会非常受欢迎。
-
既然你指出这里的目标是节省内存和性能,我已经删除了我原来的答案(因为它更适合深奥的原因,为什么这是必要的),但我仍然认为
vector<uint64_t>可能是最好的解决方案。然后你甚至不需要推断任何数据,只需存储整个值。 -
@Chad,如果我可以使用 20 位整数而不是 64 位整数,那么这意味着我可以解决 3 倍大的问题。这是一个巨大的好处。
-
如果您的问题只需要 20 位整数,可以。但它最多需要 40 位整数。除非您可以将问题分解成更小的部分(意味着一个问题集中只有 20 位整数,而另一个问题集中只有 32 位整数),否则您不太可能找到一刀切的解决方案。