Comment créer un vecteur de masques de bits qui remplace essentiellement un vecteur de booléen en C ++ 11?
J'essaie de créer un vecteur de masques de bits pour stocker des valeurs vraies / fausses qui vont me dire si la valeur de l'index particulier dans un autre vecteur doit être imprimée ou non.
par exemple: std::vector<int> a ;
b est un vecteur de masques de bits qui va contenir des valeurs d'indicateur qui correspondent au vecteur entier a et ce drapeau me dit si cette valeur particulière à l'index correspondant doit être imprimée ou non.
a {1,2,3}
b { true, false ,true} // I need a similar bitmask which would help me print 1 and 3
cette tâche peut être accomplie d'autres manières le problème dans lequel je travaille nécessite l'utilisation de bitmask. Merci d'avance de m'avoir aidé.
Réponses
Pat.ANDRIA
Comme beaucoup l'ont déjà suggéré, j'aurais fait ceci comme ceci:
myBitset
gardera les drapeaux.1
(set) pour le drapeau d'impression et0
(effacer) pour le drapeau non imprimé
#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);
}
La sortie serait:
1101001000
47910