C++ 中的位图 - unsigned int 可以完成这项工作吗?
-
12-11-2019 - |
题
我不敢承认,我已经有一段时间没有使用 C++ 了,但恐怕我现在必须使用,而且我有点生疏了。
我需要一个位图,而且我确实关心性能,我的位图大小将不再是 25 位。
我正在考虑使用 unsigned int,但恐怕我不记得它在 c/c++ 中是如何实现的
unsigned int 是否作为常规二进制数实现?
我也愿意接受任何其他有关位图的建议。
先谢谢您的帮助!
解决方案
使用 std::bitset<25>
从标题 <bitset>
. bitset
可以用索引 []
并且是一个模板,因此它可能扩展为一个 unsigned int
(或等效的)所有操作都内联。
其他提示
你有没有考虑过 std::位集 从 <bitset>
头文件?
例子:
#include <iostream>
#include <bitset>
int main() {
std::bitset<25> bits(146);
std::cout << bits << std::endl;
//using operator[] to access individual bit manually!
for(size_t i = 0 ; i < bits.size() ; ++i)
std::cout << bits[i] << " ";
return 0;
}
输出:
0000000000000000010010010
0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
笔记: bits[0]
是最低有效位,而 bits[bits.size()-1]
是最重要的位!
在线演示: http://ideone.com/3sSF0
考虑一个 bitset 。
您应该能够为位映射使用整数类型,假设它有足够的位。
但是,标准库中存在一个生成的<bitset>
。
不隶属于 StackOverflow