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

时间:2016-05-21 14:10:42

标签: c++ c++11 boolean

我见过一些编码示例,建议使用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,但我还不确定每个选项的优缺点。我想知道推荐的做法是什么。

1 个答案:

答案 0 :(得分:3)

使用一些大小的无符号整数来表示 固定大小的位序列是1998年标准之前C ++中唯一的选项 引入了url(r'^logout/$', 'django.contrib.auth.views.logout', { 'template_name': 'account/logout.html',}, name='logout' ), std::vector<bool>。这种做法继承自 C,它被认为是一个称职的程序员的熟练程度,在C ++中仍然如此考虑。

std::bitset已经被遗憾地看待了。参见例如 vector<bool>: More Problems, Better SolutionsEffective STL Item 18std::vector<bool>被认为是合适的。

无符号整数实践固有地表示手动模拟 通过明显的技巧,固定大小的比特序列,约束和复杂 事实上,只有几个大小的无符号整数(即使选择了 尺寸精确)。如果您需要固定大小的位序列 对于interface of std::bitset所支持的操作,其他条件与标准库的规定相同 是所有原因的首选手工代码 图书馆归功于它。

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