Làm cách nào để tạo một vectơ mặt nạ bit thay thế một vectơ boolean trong C ++ 11?

Jan 23 2021

Tôi đang cố gắng tạo một vectơ gồm các mặt nạ bit để lưu trữ các giá trị true / false sẽ cho tôi biết liệu chỉ số giá trị cụ thể trong một vectơ khác có cần được in hay không.

ví dụ: std::vector<int> a ;b là một vectơ gồm các mặt nạ bit sẽ giữ các giá trị cờ tương ứng với vectơ số nguyên a và cờ này cho tôi biết liệu giá trị cụ thể đó tại chỉ mục tương ứng có cần được in hay không.

a {1,2,3}  
b { true, false ,true} // I need a similar bitmask which would help me print 1 and 3 

nhiệm vụ này có thể đạt được theo những cách khác mà vấn đề tôi đang giải quyết yêu cầu sử dụng bitmask. Cảm ơn trước vì đã giúp tôi điều này.

Trả lời

Pat.ANDRIA Jan 23 2021 at 18:11

Như nhiều người đã đề xuất, tôi sẽ làm như thế này:

  • myBitsetsẽ giữ các lá cờ. 1(set) cho cờ in và 0(rõ ràng) cho cờ không in
#include <bitset>
#include <iostream>
#include <vector>
using namespace std;

int main(int argc, char** argv){

  std::vector<int> a {1,2,3,4,5,6,7,8,9,10};

  std::bitset<10> myBitset;

  myBitset.set(3);             // set fourth bit  ==> display 4
  myBitset.set(6);             // set seventh bit ==> display 7
  myBitset[8] = true;          // set nineth bit ==> display 9
  myBitset[9] = myBitset[3];   // set 10th bit ==> display 10

  std::cout << "Mybitset" << myBitset << endl;

  for (int i=0; i<a.size(); i++)
  {
      if (myBitset.test(i))
      {
          std::cout << a.at(i);
      }
  }

  return (0);
}

Kết quả sẽ là:

1101001000
47910