Wie erstelle ich einen Bitmaskenvektor, der in C ++ 11 im Grunde einen Booleschen Vektor ersetzt?

Jan 23 2021

Ich versuche, einen Bitmaskenvektor zu erstellen, um wahre / falsche Werte zu speichern, die mir sagen, ob der bestimmte Index in einem anderen Vektor gedruckt werden muss oder nicht.

Beispiel: std::vector<int> a ;b ist ein Vektor von Bitmasken, der Flag-Werte enthält, die dem ganzzahligen Vektor a entsprechen, und dieses Flag sagt mir, ob dieser bestimmte Wert am entsprechenden Index gedruckt werden muss oder nicht.

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

Diese Aufgabe kann auf andere Weise gelöst werden. Für das Problem, an dem ich arbeite, ist die Verwendung einer Bitmaske erforderlich. Vielen Dank im Voraus, dass Sie mir dabei geholfen haben.

Antworten

Pat.ANDRIA Jan 23 2021 at 18:11

Wie viele bereits angedeutet haben, hätte ich das so gemacht:

  • myBitsetwird die Flaggen behalten. 1(gesetzt) ​​für Druckflag und 0(löschen) für Nichtdruckflag
#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);
}

Die Ausgabe wäre:

1101001000
47910