0

我正在处理镶木地板文件格式。例如:

一组数据:

1 23 4 5 67 8无 无9 10 11 12 13 14

我有一个位向量来指示空元素:

1 1 0 1 1 1 1 0 1 1 0 0 1 1 1 1 1 1

并且只存储非空元素:

1 2 3 4 5 6 7 8 9 10 11 12 13 14

我想评估一个谓词: big then 5

我将非空元素与 5 进行了比较,得到了一个位向量:

0 0 0 0 0 1 1 1 1 1 1 1 1 1

我想为所有元素获得一个位向量:

0 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 1 1

粗体中的 0 是 null 元素,应该是 false。

void IntersectBitVec(vector<int64_t>& bit_vec, vector<int64_t>& sub_bit_vec) {
int data_idx = 0,
int bit_idx = 63;
for (int i = 0; i < bit_vec.size(); ++i) {
  for (int j = 63; j >=0; --j) {
    if (bit_vec[i] & 0x01 << j) {
      if (!(sub_bit_vec[data_idx] & 0x01 << bit_idx)) {
        bit_vec[i] &= ~(0x01 << j);
      }
      if (--bit_idx < 0) {
        --data_idx;
        bit_idx = 63;
      }
    }
  }
}}

我的代码很丑陋,有没有办法让它变快?太谢谢了!

4

0 回答 0