簡體   English   中英

在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);

我只想將要保留的位復制到新的bitset中。

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM