作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 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_first
和 find_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/
我是一名优秀的程序员,十分优秀!