有没有std::bitset<>
的方便模拟在实例化时动态调整大小,但避免了 boost::dynamic_bitset<>
所需的额外分配
您可以在 C 中轻松创建动态大小的位集,方法如下:
typedef struct { node_t node; block_t bits[0]; } node_bitset_t;
p = (node_bitset_t *)malloc( (sizeof(node_t) + sizeof(block_t)*blocks) * array_size);
您可以使用 std::vector<std::bitset<bits>>
来做到这一点只有当你知道 bits
在编译时。如果你使用 std::vector<boost::dynamic_bitset<>>
,然后您会看到一个额外的分配器调用。是否有折衷方案来实现上述 C 代码的平衡?
例如,您可能有一些自定义分配器用于 std::vector<...> 在每个 boost::dynamic_bitset<>
之后留下一些额外空间并分配 m_block
在那里,虽然这可能仍然会让你失去 m_block
的指针.
最佳答案
可以使用 placement new 创建这样一个类,但我不知道有一个预先存在的类可以这样做。该类不会直接实例化,而是通过工厂构建;工厂方法将使用 new
来分配所需的字节数,然后使用 placement new 来初始化缓冲区前面的对象。超过类大小的缓冲区末尾将是位存储。
实际上没有必要这样做,因为与 dynamic_bitset
相比,它不会保存任何内容。使用此方法,您有两个部分,指向位对象的指针和对象本身。使用 dynamic_bitset,您将拥有包含指向位的指针的 dynamic_bitset 对象。同样的事情。
关于c++ - 是否有一个 bitset 类在实例化时调整大小,但避免了 boost::dynamic_bitset<> 的额外分配调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7760678/