什么在内存和CPU使用方面更有效 - 一个boolean
s或BitSet 数组?不使用特定的BitSet方法,只对数组进行get/set/clear(==,=,Arrays.fill).
在什么情况下,使用bitset(STL容器)来管理一组标志而不是将它们声明为多个单独的(bool)变量更合适?
如果我使用50位标志的bitset而不是使用50个单独的bool变量,我会获得显着的性能提升吗?
请考虑以下代码
template<unsigned int N> void foo(std::bitset<N> bs)
{ /* whatever */ }
int main()
{
bitset<8> bar;
foo(bar);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
g ++在64位上抱怨这个,因为<8>被解释为unsigned long int,它与模板不完全匹配.如果我将模板更改为unsigned long int,那么32位编译会抱怨.
显然,解决这个问题的一种方法是将bitset <8>更改为bitset <8ul>,但有没有办法重新编写模板部分,以便它可以使用数字文字的默认解释?
我有一个用例需要填充
boost::dynamic_bitset<unsigned char> , from a std::string buffer.
Run Code Online (Sandbox Code Playgroud)
你能建议如何解决这个问题.所以我需要提出一个功能
void populateBitSet (std::string &buffer,
boost::dynamic_bitset<unsigned char> & bitMap) {
//populate bitMap from a string buffer
}
Run Code Online (Sandbox Code Playgroud) 我想知道Scala中BitSet的内存使用情况.例如,如果我这样做:
var bitArray:BitSet=new BitSet(10)
bitArray.add(0)
bitArray.add(2)
bitArray.add(4)
bitArray.add(6)
bitArray.add(8)
Run Code Online (Sandbox Code Playgroud)
与包含偶数0,2,4,6,8的数组相比如何?
如何用二进制编写数字:
var bitArray:BitSet=new BitSet(32)
bitArray.add(5)
bitArray.add(3)
bitArray.add(2)
bitArray.add(1)
bitArray.add(0)
Run Code Online (Sandbox Code Playgroud)
这与47号相比如何?
我在这里问内存使用情况.但作为一个更开放的问题,如果你知道,BitSet(WR对其他常见数据类型)的优点/缺点或用途是什么.
谢谢,
我有一个模板类"HEADER_FILE",它有一个变量bitset <>
using std::bitset<REG_SIZE>;
using std::bitset<REG_SIZE_2>;
template <int regSize=REG_SIZE>class Foo{
bitset<regSize> bits;
};
Run Code Online (Sandbox Code Playgroud)
我不能用
using namespace std;
Run Code Online (Sandbox Code Playgroud)
在头文件中但是没有给出任何错误.
错误:template_id不能出现在using语句中.
哪里出错了;
这里的Java引用表明布尔类型虽然用"位"信息表示,但没有精确定义的大小.相比之下,其他类型似乎表明大小是定义的.例如,int是32位,故事结束.
当我们查看BitSet的规范时,我们可以看到它由布尔值组成.通过上面的参考,这似乎表明BitSet的"大小" 是未定义的 - 毕竟它由布尔值组成.果然,文档指定:
请注意,大小与位集的实现有关,因此它可能随实现而改变.
所以我的问题是,为什么不使用精确定义的另一种数据类型实现BitSet呢?例如,如果我们使用一个字节,我们可以保证8位的大小,我们不会觉得大小可能不是我们认为的大小.确实,大小必须能够被8整除,但至少它看起来更具有尺寸确定性.
如果我们的系统绝对不能超过某个内存容量,那么在大小方面实现精确的BitSet实现似乎很有用.