我见过一些编码示例,建议使用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
,但我还不确定每个选项的优缺点。我想知道推荐的做法是什么。
答案 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 Solutions和
Effective STL Item 18。
std::vector<bool>
被认为是合适的。
无符号整数实践固有地表示手动模拟
通过明显的技巧,固定大小的比特序列,约束和复杂
事实上,只有几个大小的无符号整数(即使选择了
尺寸精确)。如果您需要固定大小的位序列
对于interface
of std::bitset
所支持的操作,其他条件与标准库的规定相同
是所有原因的首选手工代码
图书馆归功于它。
在申请的情况下,您必须判断是否有其他事情 是平等的。