¿Cómo creo un vector de máscaras de bits que básicamente reemplaza un vector de booleano en C ++ 11?

Jan 23 2021

Estoy tratando de crear un vector de máscaras de bits para almacenar valores verdaderos / falsos que me dirán si el índice particular del valor en otro vector debe imprimirse o no.

por ejemplo: std::vector<int> a ;b es un vector de máscaras de bits que va a contener valores de bandera que corresponden al vector entero ay esta bandera me dice si ese valor particular en el índice correspondiente necesita ser impreso o no.

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

Esta tarea se puede lograr de otras formas. El problema en el que estoy trabajando requiere el uso de una máscara de bits. Gracias de antemano por ayudarme con esto.

Respuestas

Pat.ANDRIA Jan 23 2021 at 18:11

Como muchos ya sugirieron, habría hecho esto así:

  • myBitsetmantendrá las banderas. 1(establecer) para el indicador de impresión y 0(borrar) para el indicador de no impresión
#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 salida sería:

1101001000
47910