gpt4 book ai didi

c++ - 我可以从 uint8_t(或 std::byte)范围初始化 std::vector 以便输入中的每一位都被视为 bool 值吗?

转载 作者:行者123 更新时间:2023-12-03 06:49:42 32 4
gpt4 key购买 nike

我知道 std::vector<bool> is bad ,但我有一个非常好的用例。
我想做这样的事情:

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)
注意:我知道我可以手动剖析输入的每个字节并进行 8 次插入,但我正在寻找标准中预先构建的东西

最佳答案

std::vector<bool>在这里是一个糟糕的选择,因为您正在考虑它的实现而不是它的行为......只是避免 vector<bool> .
使用 boost::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
Live Demo
我们必须反转输入范围,因为 boost 的动态位集 appends到最高有效位的末尾(通常是左侧),而不是右侧。

关于c++ - 我可以从 uint8_t(或 std::byte)范围初始化 std::vector<bool> 以便输入中的每一位都被视为 bool 值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64211956/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com