【发布时间】:2012-02-16 22:09:35
【问题描述】:
我有一个增加位串的函数,如下所示:
void increment(boost::dynamic_bitset<> &bitset)
{
for (int loop = 0; loop < bitset.size(); ++loop)
{
if ((bitset[loop] ^= 0x1) == 0x1)
{
break;
}
}
}
我想要一个以与调用增量相同的方式调用的函数,但以不同的方式修改位串。每次调用它时,我都想获得与前一个具有相同数量 0 的下一个位串。
例如,如果位串的长度为 10,则对该函数的前 10 次调用将给出一个带有单个 0 的位串。然后,调用 11 到 20 将返回具有 2 个 0 的位串。我希望这一直持续下去,直到位串全为 0。
如何设置这样的功能?谢谢!
【问题讨论】:
-
看起来是 XY 问题
-
如果你的字符串长度只有 10,你可以迭代整数范围
[0, 1 << 10)并使用这些整数。 -
@SethCarnegie 好的,对问题的澄清:) 我用一个位串表示一组大对象,并希望对该位串的所有子集进行一些测试。但是,我知道我感兴趣的子集通常只缺少集合中的几个元素,因此我想从仅删除一个元素开始生成所有子集并向下工作。
-
@KerrekSB 那是为了说明。位串的长度通常至少为 400。
-
长度为 10 的位串有 9 个,有一个零,有 36 个位串,有两个零。有相当多的长度为 400 的位串带有两个零。这是二项式系数。
标签: c++ boost bit-manipulation boost-dynamic-bitset