在什么情况下,使用bitset(STL容器)来管理一组标志而不是将它们声明为多个单独的(bool)变量更合适?
如果我使用50位标志的bitset而不是使用50个单独的bool变量,我会获得显着的性能提升吗?
好吧,作为bitset的50个bool将占用7个字节,而作为bool的50个bool将占用50个字节.这些日子并不是什么大不了的事情,所以使用bool可能就好了.
但是,一个bitset可能有用的地方是你需要经常传递那些bool,特别是如果你需要从函数返回set.使用bitset,您需要在堆栈上移动返回的数据更少.然后,你可以改为使用refs,并传递更少的数据.:)
当你需要序列化/反序列化时,std :: bitset会给你额外的积分.您可以将其写入流或使用它从流中读取.但当然,单独的bools会更快.毕竟,它们针对这种用途进行了优化,而bitset则针对空间进行了优化,并且仍然涉及到函数调用.它永远不会比单独的bool更快.
非常节省空间
比特摆弄效率低下
使用op<<
和提供序列化/反序列化op>>
所有比特都打包在一起:你将在一个地方拥有旗帜.
非常快
Bools没有包装在一起.他们将成为某个地方的成员.
决定事实.我个人会使用std::bitset
一些不具有性能的关键,并且如果我只有少量bool(因此它具有相当的概览性),或者如果我需要额外的性能,则会使用bool.