2
我正在寻找快速位附加的bitset实现,其中几个位可以有效地附加在一个地方。快速位集追加?
例如
char value = 31;
char n_bits = 5;
fast_bitset bits;
bits.append(value, n_bits);
我到目前为止尝试过boost :: dynamic_bitset和std :: vector。这两者都很慢。
旧帖子
我使用boost ::来,dynamic_bitset收拾一些数据。
通常我想在同一时间,这将导致像调用pack〜5位:
char value = 31;
char n_bits = 5;
boost::dynamic_bitset<> bits;
for(char n = n_bits-1; n >= 0; --n)
bits.push_back((value >> n) & 1);
然而,这对我来说相当低效,不可能一个一个去添加所有的位?
例如
char value = 31;
char n_bits = 5;
boost::dynamic_bitset<> bits;
bits.append(value, n_bits);
我希望它这样做:
template<typename T>
void append(T value, size_t n_bits)
{
value <<= sizeof(T) - n_bits; // Make target bits most significant, remove all non-target bits.
// TODO: Shift bits into proper place and use OR to add all target bits to bitset in one go
}
为什么不来,dynamic_bitset有这样的功能?是否有可能有效实施?
但是,不会只是追加几个0或1的bitset?例如11111,00000.它将如何工作10110? – ronag 2011-04-22 11:16:14
@ronag:是的,它会追加全0或全1,但您可以稍后重置它们。我会更新帖子,给我一秒钟。 – 2011-04-22 11:17:30
如果dynamic_bitset具有'.reserve',那肯定会很好。 :-) – 2011-04-22 12:56:01