ฉันจะสร้างเวกเตอร์ของ bitmasks ที่โดยทั่วไปแทนที่เวกเตอร์ของบูลีนใน C ++ 11 ได้อย่างไร

Jan 23 2021

ฉันกำลังพยายามสร้างเวกเตอร์ของ bitmasks เพื่อเก็บค่าจริง / เท็จซึ่งจะบอกฉันว่าต้องพิมพ์ดัชนีเฉพาะค่าในเวกเตอร์อื่นหรือไม่

เช่น: std::vector<int> a ;b เป็นเวกเตอร์ของ bitmasks ซึ่งจะเก็บค่าแฟล็กที่สอดคล้องกับเวกเตอร์จำนวนเต็ม a และแฟล็กนี้บอกฉันว่าจำเป็นต้องพิมพ์ค่าเฉพาะนั้นในดัชนีที่เกี่ยวข้องหรือไม่

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

งานนี้สามารถทำได้ด้วยวิธีอื่นปัญหาที่ฉันกำลังทำงานอยู่ต้องใช้ bitmask ขอขอบคุณล่วงหน้าที่ช่วยฉันในเรื่องนี้

คำตอบ

Pat.ANDRIA Jan 23 2021 at 18:11

ตามที่หลายคนแนะนำไปแล้วฉันจะทำสิ่งนี้:

  • myBitsetจะรักษาธง 1(set) สำหรับแฟล็กการพิมพ์และ0(เคลียร์) สำหรับแฟล็กที่ไม่พิมพ์
#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);
}

ouput จะเป็น:

1101001000
47910