在C++中快速拆分dynamic_bitset
Fast splitting of dynamic_bitset in C++
我认为这个标题几乎是自我解释的。我的代码中有一个boost::dynamic_bitset,我希望对它进行快速拆分。目前,我正在使用for循环来实现这一点,但我确信有一些更快的方法可以实现,使用逐位运算符。例如:
B = [0 1 0 0 0 1 1 1 0 1]
我想删除B[2.5]:
B2 = [0 0 0 1]
有办法做吗?
可以使用掩码、移位和调整大小:
boost::dynamic_bitset<> B(10);
B[1] = 1;
B[5] = 1;
B[6] = 1;
B[7] = 1;
B[9] = 1;
boost::dynamic_bitset<> mask(B.size(), 0xf << 2);
boost::dynamic_bitset<> B2(B.size());
B2 = (B & mask) >> 2;
B2.resize(4);
我只需要将您想要保留的位复制到一个新的位集中。
using namespace std;
#include <iostream>
#include <boost/dynamic_bitset.hpp>
int main()
{
boost::dynamic_bitset<> B(10);
//Set bits, default is 0
B[1] = 1;
B[5] = 1;
B[6] = 1;
B[7] = 1;
B[9] = 1;
//Print out current bitset
std::cout << "B: ";
for (boost::dynamic_bitset<>::size_type i = 0; i < B.size(); ++i)
std::cout << B[i];
std::cout << "n";
//Create a new bitset
boost::dynamic_bitset<> B2(6);
B2[0] = B[0];
B2[1] = B[1];
B2[2] = B[6];
B2[3] = B[7];
B2[4] = B[8];
B2[5] = B[9];
//Print out B2
std::cout << "n";
std::cout << B2 << "n";
return 0;
}
相关文章:
- 在成员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 哈希函数算法