Come creo un vettore di maschere di bit che sostanzialmente sostituisce un vettore di booleano in C ++ 11?

Jan 23 2021

Sto cercando di creare un vettore di maschere di bit per memorizzare valori vero / falso che mi diranno se il valore particolare dell'indice in un altro vettore deve essere stampato o meno.

es: std::vector<int> a ;b è un vettore di maschere di bit che conterrà valori di flag che corrispondono al vettore intero a e questo flag mi dice se quel particolare valore all'indice corrispondente deve essere stampato o meno.

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

questo compito può essere ottenuto in altri modi il problema in cui sto lavorando richiede l'uso di maschera di bit. Grazie in anticipo per avermi aiutato con questo.

Risposte

Pat.ANDRIA Jan 23 2021 at 18:11

Come molti hanno già suggerito, avrei fatto questo in questo modo:

  • myBitsetmanterrà le bandiere. 1(set) per flag di stampa e 0(clear) per flag di non stampa
#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);
}

L'output sarebbe:

1101001000
47910