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