繁体   English   中英

使用unsigned int而不是std :: vector <bool> 或std :: bitset推荐的做法?

[英]Is using unsigned int instead of std::vector<bool> or std::bitset a recommended practice?

我已经看到一些编码示例,建议使用unsigned int来表示位图:

unsigned int zero_rows {0};
for (auto i = 0; i < n_rows; ++i) {
  zero_rows |= (1 << i);
  …
}

这是否比使用std::vector<bool>提供了任何好处:

std::vector<bool> zero_rows(n_rows, false);
for (auto i = 0; i < n_rows; ++i) {
  zero_rows[i] = true;
  …
}

我猜的另一个选择可能是std::bitset ,但我还不确定每个选项的优缺点。 我想知道推荐的做法是什么。

使用一些大小的无符号整数来表示固定大小的位序列是1998年标准之前C ++中唯一的选项,当时引入了std::vector<bool>std::bitset 这种做法继承自C,它被认为是一个称职的程序员的熟练程度,并且在C ++中仍然如此考虑。

std::vector<bool>已经被遗憾地看待了。 参见例如vector<bool> :更多问题,更好的解决方案有效的STL项目18 std:::bitset被认为适合用途。

无符号整数实践固有地表示通过明显技巧对固定大小的比特序列进行手动模拟,由于只有几个无符号整数的大小(即使所选大小精确),也会受到限制和复杂化。 。 如果你需要一个固定大小的比特序列来接受std::bitset接口所支持的操作,那么其他条件相同的标准库的规定是首选的手动代码为所有的图书馆存在的原因。

在申请的情况下,你必须判断其他事情是否平等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM