c++ - 遍历 boost::dynamic_bitset

标签 c++ boost

我有一个 boost dynamic_bitset我正在尝试从中提取设置位:

boost::dynamic_bitset<unsigned long> myBitset(1000);

我的第一个想法是对每个索引做一个简单的“转储”循环并询问它是否已设置:

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

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

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

我进行了一些测试,似乎第二种方法更有效,但这让我担心可能有另一种“更正确”的方法来执行此迭代。我无法在文档中找到任何示例或说明来指示迭代设置位的正确方法。

那么,使用 find_first()find_next() 是迭代 dynamic_bitset 的最佳方法,还是有其他方法?

最佳答案

find_firstfind_next 是最快的方法。原因是如果没有设置它们,它们可以跳过整个 block (dynamic_bitset::bits_per_block 位,可能是 32 或 64)。

注意 dynamic_bitset does not have iterators ,所以无论如何它都会表现得有点不像 C++。

关于c++ - 遍历 boost::dynamic_bitset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4684488/

相关文章:

c++ - 允许用户命名文件名但将其保存在预定位置 - OSX

c++ boost MPI & threading - 序列化错误 : Address not mapped

c++ - 使用 Allegro 图形库 boost 单元测试

c++ - 使不可变类型可变(consts 和 boost)

c++ - 优化 boost::spirit::qi 解析器

c++ - `boost::signals2` 中的信号签名是如何实现的?

c++ - 协助乱码翻译

c++ - 什么时候使用 "pointer to function"和 "function pointer"?

c++ - 如何在不在 Visual Studio 2017 中创建项目的情况下编译 C++ 文件?

c++ - 是否有异步C++ HTTP框架可用?