タイトルはかなり自明だと思います。私のコードには 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 があり、それを高速に分割したいと考えています。現在、私は 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;
}