在C++中初始化std::位集的数组

Initialize an array of std::bitset in C++

本文关键字:数组 std C++ 初始化      更新时间:2023-10-16

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

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

然而,我想知道是否有一种"适当"的方式来做这件事

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

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

bitsetdefault constructor将所有元素初始化为0。我认为初始化数组的最佳方法是使用

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

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

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