在C++中初始化std::位集的数组
Initialize an array of std::bitset in C++
我正在尝试将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};
bitset
的default constructor
将所有元素初始化为0
。我认为初始化数组的最佳方法是使用
std::bitset<64> map[100] = {};
因为该默认启动所有元素。它也干净、清晰、简洁。
此外,在您的代码中,您可以认为0是1,反之亦然(仅更改逻辑)。但前提是你能做到。
相关文章:
- std::向量与传递值的动态数组
- std::vector的包装器,使数组的结构看起来像结构的数组
- 初始化具有非默认构造函数的std::数组项的更好方法
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 将 int 数组转换为 std::vector<int*>
- 输入std::数组时出现问题
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 为什么std::vector比数组慢
- C++如何生成std::数组列表
- 捕获lambda中的std::数组
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- std::数组边界检查如何工作?
- 通过unique_ptr访问std::数组
- 我正在使用 std::bitset 并尝试创建两个大小为 100,000,000,000 的数组 std::bitset
- 对象的数组-STD ::数组 - 构造函数初始化问题
- 标准::数组<std::array<T、N2>、N> 数据成员上的括号运算符重载
- 从未来对象数组std::vector中检索值
- 如何将动态数组(std::vector)传递给odbc函数SQLBindParameter