通过boost :: dynamic_bitset迭代

Jar*_*edC 10 c++ boost

我有一个boost dynamic_bitset,我试图从中提取设置位:

boost::dynamic_bitset<unsigned long> myBitset(1000);
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是在每个索引中执行一个简单的"转储"循环,并询问它是否已设置:

for(size_t index = 0 ; index < 1000 ; ++index)
{
   if(myBitset.test(index))
   {
      /* do something */
   }
}
Run Code Online (Sandbox Code Playgroud)

但后来我看到两个有趣的方法,find_first()并且find_next(),我认为肯定是意味着这个目的:

size_t index = myBitset.find_first();
while(index != boost::dynamic_bitset::npos)
{
        /* do something */
        index = myBitset.find_next(index);
}
Run Code Online (Sandbox Code Playgroud)

我运行了一些测试,看起来第二种方法效率更高,但这让我担心可能还有另一种"更正确"的方法来执行这种迭代.我无法在文档中找到任何示例或注释,指示迭代设置位的正确方法.

那么,使用find_first()find_next()迭代a的最佳方式dynamic_bitset,还是有另一种方式?

Fre*_*Foo 9

find_first并且find_next是最快的方式.原因是dynamic_bitset::bits_per_block如果没有设置它们,它们可以跳过整个块(比特,可能是32或64).

请注意,dynamic_bitset 没有迭代器,因此无论如何它都会表现得有点不可能.