我知道这std::vector<bool>很糟糕,但我有一个非常好的用例。
我想做这样的事情:
uint8_t data [] = {7,32};
std::vector<bool> vb/*...*/ ;
// now vb is size of 8 vector with this values:
// false, false, false, false, false, true, true, true, (7)
// false, false, true, false, false, false, false, false (32)
Run Code Online (Sandbox Code Playgroud)
注意:我知道我可以手动解析输入的每个字节并进行 8 次插入,但我正在寻找标准中预先构建的内容
std::vector<bool>在这里是一个糟糕的选择,因为您正在考虑它的实现而不是它的行为......只是避免vector<bool>.
使用 aboost::dynamic_bitset代替。有趣的是,我个人发现无论如何它的性能要高得多:
std::array<std::uint8_t, 2> data {7,32};
boost::dynamic_bitset<std::uint8_t> vb(rbegin(data), rend(data));
std::cout << vb; // 0000011100100000
Run Code Online (Sandbox Code Playgroud)
我们必须反转输入范围,因为 boost 的动态位集附加到最高有效位的末尾(通常是左侧),而不是右侧。
| 归档时间: |
|
| 查看次数: |
265 次 |
| 最近记录: |