使用整数值更新dynamic_bitset
Update dynamic_bitset with integer value
使用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);
}
但是,由于它似乎断言位集在 init 之前是明确的,因此使用具有相同效果的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)
以限制容量我不确定这个函数是否应该是公共接口的一部分(看起来可能不是(,但你显然可以使用
c.clear(); c.dispatch_init(4, i, {});
在科里鲁也看到它
相关文章:
- 在成员dynamic_bitset上使用 boost::from_block_range 时出错,但在本地dynamic
- 如何打印大于"无符号长长"的"std::bitset"的十进制值?
- 关于 std::bitset 构造函数的几个问题?
- 如何以滑动窗口方式从 std::bitset 读取位并将它们转换为 int?
- C++类中的二维"dynamic"数组?
- 在哪里可以找到 std::bitset 的数据成员?
- 对于std::bitset,是否有一个ffs()等价物
- protobuf in C++ with dynamic binding for google::protobuf::M
- 移动 std::bitset<N> 是否超过 N 个位置未定义的行为?
- 是否可以让 Bitset 将位打印到一行?
- 找不到使用 bitset 实例化模板函数的有效方法
- 警告的原因是什么:"when type is in parentheses, array cannot have dynamic size"?
- 我正在使用 std::bitset 并尝试创建两个大小为 100,000,000,000 的数组 std::bitset
- OMNeT++ cPacket as std::bitset 以应用 Reed-Solomon 编码
- 如何在<N>不发生内存泄漏的情况下同时(线程安全)填充 c++11 std::map<std::string,std::bitset*>?
- CUDA 错误:"dynamic initialization is not supported for __device__, __constant__ and __shared__ variabl
- 初始化一对(bitset,int)的向量
- 如何修复'The procedure entry point SDL_RWclose could not be located in the dynamic link library'
- 将字符数组转换为 std::string 以传递到 std::bitset seg 错误
- std::bitset 哈希函数算法