C ++ 11'de temelde bir boole vektörünün yerini alan bir bit maskeleri vektörünü nasıl oluşturabilirim?
Jan 23 2021
Doğru / yanlış değerleri depolamak için bir bit maskeleri vektörü oluşturmaya çalışıyorum, bu bana başka bir vektördeki belirli indeks değerinin yazdırılması gerekip gerekmediğini söyleyecek.
örneğin: std::vector<int> a ;
b, a tam sayı vektörüne karşılık gelen bayrak değerlerini tutacak bir bit maskeleri vektörüdür ve bu bayrak, karşılık gelen indeksteki belirli bir değerin yazdırılması gerekip gerekmediğini söyler.
a {1,2,3}
b { true, false ,true} // I need a similar bitmask which would help me print 1 and 3
bu görev başka şekillerde de gerçekleştirilebilir, çalıştığım sorun bit maskesi kullanımını gerektirir. Bu konuda bana yardım ettiğiniz için şimdiden teşekkürler.
Yanıtlar
Pat.ANDRIA Jan 23 2021 at 18:11
Birçoğunun zaten önerdiği gibi, bunu şöyle yapardım:
myBitset
bayrakları koruyacak.1
(set) baskı bayrağı için ve0
(temizle) baskı dışı bayrak için
#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);
}
Çıktı şöyle olacaktır:
1101001000
47910
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı