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

时间:2014-04-21 01:30:08

标签: c++ arrays c++11 bitset

我试图将64位bitset数组中的所有元素都设置为0. std::bitset<64> map[100]; 我知道我可以使用循环迭代所有元素并像这样调用.unset()。

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

但是,我想知道是否有适当的&#34;这样做的方式。

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

3 个答案:

答案 0 :(得分:6)

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(); });

Live demo

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

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

答案 1 :(得分:1)

bitset default constructor将所有元素初始化为0。我想说初始化数组的最好方法是使用

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

因为默认启动所有元素。它也干净,清晰,简洁。

答案 2 :(得分:-2)

此外,在您的代码中,您可以认为0是1,反之亦然(只改变逻辑)。但只有你能够做到这一点。