何时使用STL位集而不是单独的变量?

Dav*_*vid 13 c++ performance bitsets

在什么情况下,使用bitset(STL容器)来管理一组标志而不是将它们声明为多个单独的(bool)变量更合适?

如果我使用50位标志的bitset而不是使用50个单独的bool变量,我会获得显着的性能提升吗?

Her*_*rms 10

好吧,作为bitset的50个bool将占用7个字节,而作为bool的50个bool将占用50个字节.这些日子并不是什么大不了的事情,所以使用bool可能就好了.

但是,一个bitset可能有用的地方是你需要经常传递那些bool,特别是如果你需要从函数返回set.使用bitset,您需要在堆栈上移动返回的数据更少.然后,你可以改为使用refs,并传递更少的数据.:)


Joh*_*itb 9

当你需要序列化/反序列化时,std :: bitset会给你额外的积分.您可以将其写入流或使用它从流中读取.但当然,单独的bools会更快.毕竟,它们针对这种用途进行了优化,而bitset则针对空间进行了优化,并且仍然涉及到函数调用.它永远不会比单独的bool更快.

位集合

  • 非常节省空间
  • 比特摆弄效率低下
  • 使用op<<和提供序列化/反序列化op>>
  • 所有比特都打包在一起:你将在一个地方拥有旗帜.

单独的bools

  • 非常快
  • Bools没有包装在一起.他们将成为某个地方的成员.

决定事实.我个人会使用std::bitset一些不具有性能的关键,并且如果我只有少量bool(因此它具有相当的概览性),或者如果我需要额外的性能,则会使用bool.

  • 我添加了使用按位或运算符来组合标志集作为bitset的巨大胜利的能力. (4认同)