Как мне создать вектор битовых масок, который в основном заменяет вектор логического значения в C ++ 11?
Я пытаюсь создать вектор битовых масок для хранения истинных / ложных значений, которые сообщают мне, нужно ли печатать значение конкретного индекса в другом векторе или нет.
например: std::vector<int> a ;
b - вектор битовых масок, который будет содержать значения флагов, которые соответствуют целочисленному вектору a, и этот флаг сообщает мне, нужно ли печатать это конкретное значение в соответствующем индексе или нет.
a {1,2,3}
b { true, false ,true} // I need a similar bitmask which would help me print 1 and 3
эта задача может быть решена другими способами. Проблема, над которой я работаю, требует использования битовой маски. Заранее спасибо за помощь мне в этом.
Ответы
Pat.ANDRIA
Как уже многие предлагали, я бы сделал это так:
myBitset
сохранят флаги.1
(установить) для флага печати и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);
}
Выход будет:
1101001000
47910