大型二进制数据操作的数据结构

时间:2016-02-28 00:49:48

标签: c++11 bit genetics

Hello其他程序员,

我正致力于一项速度效率至关重要的基因项目。我基本上有很多二进制数据要处理。我在c ++ 11工作。我有两个需要优化的功能。

首先,我需要能够在四个二进制字符串之间使用二元运算符,然后检查所有位是否全为零。

即。 (bitV1&(bitV2 ^ bitV3)| bitV4)== 0..0

其次,我有时需要在某个位置翻转某些位。

我的问题是bitset需要在编译时知道大小,并且我只在执行时才知道编译时的大小。并且向量似乎不适用于二元运算符。我可以在chars / string或int数组中翻译我的数据,然后在那些上使用bitwises运算符,但代码不会很漂亮。

有人知道一种有效而简单的方法吗?

这是一个MWE:

#include<iostream>
#include<bitset>
#include<vector>


int main() {
// I dont know the sizes for the sequences at compile time.
//std::bitset<intFromFile> firstBitset ("0011"); // doesnt compile

std::bitset<4> firstBitset ("0011");
std::bitset<4> secondBitset ("0101");
std::bitset<4> resultBitset = firstBitset &secondBitset;
std::cout << resultBitset; //OK

std::vector<bool> firstVector  {0,0,1,1};
std::vector<bool> secondVector {0,1,0,1};
//std::vector<bool> result = firstVector^secondVector; //ERROR
std::vector<bool> result {0,0,0,1}; //  OK

for (unsigned short int i = 0 ; i < result.size(); ++i){
    std::cout << result.at(i);
}
std::cout << std::endl;

return 0;
}

0 个答案:

没有答案