使用dynamic_bitset,可以基于整数值进行初始化(下面的5、124)。是否可以使用整数值进行更新?
以下解决方案在创建新的dynamic_bitset时在每次更新时分配堆内存。这是一个较差的解决方案(速度慢,可能出现堆碎片等)。
std::vector<boost::dynamic_bitset<uint8_t>> data;
data.push_back(boost::dynamic_bitset<uint8_t>(4, 5));
data.push_back(boost::dynamic_bitset<uint8_t>(7, 124));
for(const auto& s: data)
std::cout << s << std::endl;
for(int i; i<10; i++)
{
data[0]=boost::dynamic_bitset<uint8_t>(4, i);
for(const auto& s: data)
std::cout << s << std::endl;
}
关于在不设置每个位的情况下如何从int更新值的任何想法?
也许您可以从阻止列表中进行初始化:
for(uint8_t i = 0; i<10; i++) {
data[0].clear();
data[0].init_from_block_range(&i, &i+1);
}
但是,由于似乎断言该位集在初始化之前是清楚的,因此使用具有相同效果的append()
会更自然(并且最终需要8位以上时可能会有更多好处):
#include <boost/dynamic_bitset.hpp>
#include <iostream>
using BSet = boost::dynamic_bitset<uint8_t>;
using Block = BSet::block_type;
int main() {
std::vector<BSet> data;
data.emplace_back(4, 5);
data.emplace_back(7, 124);
auto& a = data[0];
auto& b = data[1];
std::cout << a << "\t" << b << "\n----\n";
for(Block i = 0; i<10; i++)
{
a.clear();
a.init_from_block_range(&i, &i+1);
b.clear();
b.append(i);
std::cout << a << "\t" << b << "\n";
}
}
打印
0101 1111100
----
00000000 00000000
00000001 00000001
00000010 00000010
00000011 00000011
00000100 00000100
00000101 00000101
00000110 00000110
00000111 00000111
00001000 00001000
00001001 00001001
**注意*添加.resize(4)
以限制容量