ฉันจะสร้างเวกเตอร์ของ bitmasks ที่โดยทั่วไปแทนที่เวกเตอร์ของบูลีนใน C ++ 11 ได้อย่างไร
ฉันกำลังพยายามสร้างเวกเตอร์ของ 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
ตามที่หลายคนแนะนำไปแล้วฉันจะทำสิ่งนี้:
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