我在代码中使用bitset:
std::bitset<MAX_INSTRUMENTS_NUMBER_IN_SYSTEM> updatedInstruments;
通常我只需要迭代“设置”(或“未设置”)的值,这就是我这样做的方式:
for (int instrumentId = 0; instrumentId < MAX_INSTRUMENTS_NUMBER_IN_SYSTEM; instrumentId++) {
if (!updatedInstruments[instrumentId]) {
continue;
}
// work
}
是否可以改进此迭代以使其更具可读性并且可能更快?
答案 0 :(得分:0)
我不认为您可以使用std::bitset
在代码中利用设置位的连续性:界面在此任务中没有提供任何帮助,而且没有访问底层存储并直接使用它的合法方式。 1
如果你能负担得起更换容器,你可以找到几个更好的选择。例如Here是一个类似bitset的结构,提供&#34;枚举器&#34;对于活动位(似乎大多数情况下与图像上的跨距一起工作),并且在上面链接的副本中,还有一些针对此用例更专用的数据结构的其他建议。
std::bitset
没有迭代器:-o另外,在std::vector<bool>
上执行了类似的测试(应该打包位)或多或少以相同的方式)使用g ++和clang ++的迭代器给出了~2x减速。