C++ 为什么在位集上使用位掩码?

C++ 为什么在位集上使用位掩码?,c++,algorithm,bitmask,C++,Algorithm,Bitmask,在很多有竞争力的编程网站和书籍中,我看到了一些问题和解决方案,例如在许多动态编程和完全搜索问题中使用了位屏蔽。我认为它们比布尔数组更受欢迎,因为它们更轻,因为它们每个值只占用1位,而布尔数组中每个值占用1字节 然而,当我开始了解位集时,我想知道为什么使用位掩码,因为位集也占用相同的内存量,即每个值1位。但它们还有一个额外的优势,即更易于使用和管理。现在我对此感到困惑 So TL;DR为什么位掩码优先于位集,尤其是在竞争性编程环境中? 为了给大家一个想法,这里有一个需要动态编程和比特屏蔽的问题,并

在很多有竞争力的编程网站和书籍中,我看到了一些问题和解决方案,例如在许多动态编程和完全搜索问题中使用了位屏蔽。我认为它们比布尔数组更受欢迎,因为它们更轻,因为它们每个值只占用1位,而布尔数组中每个值占用1字节

然而,当我开始了解位集时,我想知道为什么使用位掩码,因为位集也占用相同的内存量,即每个值1位。但它们还有一个额外的优势,即更易于使用和管理。现在我对此感到困惑

So TL;DR为什么位掩码优先于位集,尤其是在竞争性编程环境中? 为了给大家一个想法,这里有一个需要动态编程和比特屏蔽的问题,并且有一个我在社论中看到的有点复杂的解决方案(至少对我这个级别的人来说,我只是一个10年级的学生)

谢谢你提前回答我的问题


编辑:关于竞争性编程的恶意评论,如果您认为使用位掩码是一种不当行为,请尝试将上面问题链接的编辑中的代码转换为使用位集,并获得AC裁决

竞争性编程依赖于许多不良做法。对我来说,这是一个教没有经验的程序员如何不编写好的
c++
代码的练习。但更让人怀疑的是:这可能与执行速度有关。位掩码可以在相当低的级别进行操作,但位集需要更多的开销。如果我正确地回忆起我的c/c++,这将被认为是“主要基于观点”,但使用位掩码的唯一好理由是“这就是这里的习惯用法”,以及“测量表明我们可以获得有用的性能优势”。第二个原因可能表明工具链很差。位集不需要比位掩码慢。同样令人惊讶的是,旧信息可以保留多久。正确编译一个位集应该也很好,但情况可能并非总是如此。此外,基于C风格的思维量仍然在C++代码中浮动,人们回到掩蔽上的行为应该不会让任何人吃惊。而且面具的用户可能不知道
位集
甚至不存在。海报上写道:不要把一种结构与另一种结构结合在一起(在任何语言或结构类型中),尝试任何一种,并在这种情况下保留任何有意义的东西。稍后你将有足够的时间进入语言/阵营战争