在C++中初始化一个std::bitset数组

3

我正在尝试将64位bitset数组中的所有元素设置为0。std::bitset<64> map[100]; 我知道可以使用循环迭代所有元素并调用.unset()来实现,如下所示。

int i;
for( i = 0; i< 100 ; i++){
    map[i].unset();
}

然而,我想知道是否有一种“适当”的方法来实现它。

std::bitset<64> map[100] = {}; 可以吗?

3个回答

8

std::bitset 的默认构造函数将所有位都初始化为零,因此您无需进行额外操作,只需声明数组即可。

std::bitset<64> map[100];  // each bitset has all 64 bits set to 0

为了将所有位设置为1,我会使用bitset::set成员函数,该函数有一个重载版本可以将所有位都设置为1。结合使用for_each函数,在每个数组元素上调用该成员函数。
std::for_each(std::begin(map), std::end(map), 
              [](std::bitset<64>& m) { m.set(); });

演示链接

另一种解决方案是初始化每个数组成员,但对于一个100个元素的数组来说这相当繁琐。

std::bitset<64> map[100] = {0xFFFFFFFFFFFFFFFFULL, ... 99 times more};

也可以使用 std::fill(std::begin(map), std::end(map), -1); - Brian Rodriguez

1

bitset默认构造函数会将所有元素初始化为0。我认为初始化数组最好的方式是使用

std::bitset<64> map[100] = {};

作为默认值,它初始化所有元素。而且它干净、清晰、简明。

如果我想将它们全部设置为1而不是0怎么办?我需要这样做吗:std::bitset<64> map[100] = {1}; - vincentleest
1
@vincentleest 只将 map[0][0] 设置为 1。其他都设置为 0 - R Sahu
1
嗯,既然默认构造函数已经完成了工作,为什么要重复呢?这需要时间。 - Alexandru Barbarosie

-2
此外,在您的代码中,您可以认为0是1,反之亦然(只需更改逻辑)。但前提是您能够做到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接