C++ bitkopa un tās pielietojums

Bitu kopa ir būtības masīvs, taču katra Būla vērtība netiek saglabāta atsevišķā baitā, bet bitkopa optimizē vietu tā, lai katra Būla vērtība aizņem tikai 1 bita vietu , tātad bitkopas aizņemtā vieta ir mazāka nekā būtības masīva vai būtības vektora vieta .

Bitu kopas ierobežojums ir tāds lielumam jābūt zināmam kompilēšanas laikā, t.i., bitkopas lielums ir fiksēts.

std::bitset ir klases veidne bitkopai, kas ir definēta iekšpusē galvenes fails tāpēc pirms bitkopas izmantošanas programmā ir jāiekļauj galvenes fails.

Sintakse:

bitset variable_name(initialization); 

Mēs varam inicializēt bitkopu trīs veidos:

1. Neinicializēts: Visi biti tiks iestatīti uz nulli.

bitset variable_name; 

2. Inicializācija ar veselu decimālo skaitli: Bitset attēlos doto decimālo skaitli binārā formā.

bitset variable_name(DECIMAL_NUMBER); 

3. Inicializācija ar bināro virkni: Bitset pārstāvēs doto bināro virkni.

bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING'); 

Piemērs:

C++
// C++ program to demonstrate the bitset  #include  #include  using namespace std; int main() {  // declaring an uninitialized bitset object  bitset <8>uninitializedBitset;  // inicializācija ar decimālskaitļu bitkopu <8>decimalBitset(15);  // inicializācija ar bināro virkņu bitkopu <8>stringBitset(string('1111'));  cout < < 'Uninitialized bitset: '  < < uninitializedBitset   < < endl;  cout  < < 'Initialized with decimal: '  < < decimalBitset   < < endl;  cout  < < 'Initialized with string: '  < < stringBitset   < < endl;  return 0; } 

Izvade
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111 

std::bitset Dalībnieku funkcijas

std::bitset klase satur dažas noderīgas dalībnieku funkcijas darbam ar bitkopas objektiem. Šeit ir saraksts ar dažām std::bitset dalībnieku funkcijām:

Funkcijas nosaukums

Funkcijas apraksts

set()

Iestatiet bitu vērtība pie dotā indeksa uz 1 .

atiestatīt ()

Iestatiet bitu vērtība noteiktā indeksā uz 0 .

apgriezt ()

Pagrieziet bitu vērtību pie dotā indeksa.

skaitīt ()

Skaitīt skaits iestatīt bitus .

pārbaude()

Atgriež Būla vērtība pie dotā indeksa .

jebkurš ()

Pārbauda, ​​vai jebkura mazliet ir komplekts .

neviens ()

Pārbauda, ​​vai neviens mazliet ir komplekts.

viss ()

Pārbaudiet, vai visi mazliet ir komplekts.

Izmērs()

Atgriež bitkopas lielums.

to_string()

Pārvērš bitkopa uz std::string.

sekot()

Pārvērš bitkopa uz neparakstītu garu.

to_ullong()

Pārvērš bitset uz neparakstītu long long.

Piemērs:

C++
// C++ program to demonstrate the // use of std::bitset member // functions #include  #include  using namespace std; int main() {  // declaring index variable  int index = 0;  // declaring few bitset objects  bitset <4>allSet('1111'), allUnset;  cout < < 'any() value: '  < < boolalpha  < < allSet.any()   < < endl;  cout  < < 'all() value: '  < < allSet.all()  < < endl;  cout  < < 'none() value: '  < < allSet.none()  < < endl;  cout  < < 'test() at index 0: '  < < noboolalpha   < < allSet.test(index)  < < endl;  cout  < < 'size() value: '  < < allSet.size()  < < endl;  cout  < < 'Value of allUnset on before using set(): '   < < allUnset  < < endl;  allUnset.set(index);  cout  < < 'Value of allUnset on after using set(): '   < < allUnset  < < endl;  cout  < < 'Value of allSet on before using reset(): '   < < allSet  < < endl;  allSet.reset(index);  cout  < < 'Value of allSet on after using reset(): '   < < allSet  < < endl;  // declaring an empty string  string bitString;  // using to_string() method to assign value to empty  // string  bitString = allSet.to_string();  cout  < < 'bitString: '  < < bitString  < < endl;  cout  < < 'Unsigned Long value: '  < < allSet.to_ulong();  return 0; } 

Izvade
any() value: true all() value: true none() value: false test() at index 0: 1 size() value: 4 Value of allUnset on before using set(): 0000 Value of allUnset on after using set(): 0001 Value of allSet on before using reset(): 1111 Value of allSet on after using reset(): 1110 bitString: 1110 Unsigned Long value: 14 

Piezīme: Boolalpha tiek izmantots, lai drukātu patiesu un nepatiesu, nevis 1 vai 0 Būla vērtībām un noboolalpha pretējai.

std::bitset Operatori

Daži pamata operatori ir pārslogoti, lai strādātu ar bitkopas objektiem. Šis ir šo operatoru saraksts:

Operators

Darbība

[]

Piekļuve operators

&

Bitu veidā UN

|

Bitu veidā VAI

!

Bitu veidā BEZMAKSAS

>>=

Binārs Labā maiņa un piešķirt

< <=

Binārs Kreisā maiņa un piešķirt

&=

Piešķiriet bitu vērtību UN uz pirmo bitu kopu.

|=

Piešķiriet bitu vērtību VAI uz pirmo bitu kopu.

^=

Piešķiriet bitu vērtību BEZMAKSAS uz pirmo bitu kopu.

~

Bitu veidā NAV

Piemērs:

C++
// C++ program to show the different operator functions on // bitset #include  #include  using namespace std; int main() = bitset2)   < < endl;  // bitwise NOT  cout  < < 'Bitwise NOT: '  < < (result = ~bitset1)  < < endl;  // bitwise XOR  bitset1 = 9;  cout  < < 'Bitwise XOR: '  < < (bitset1 ^= bitset2)  < < endl;  bitset1 = 9;  cout  < < 'Binary leftshift on bitwise1: '   < < (bitset1  < <= 1)  < < endl;  bitset1 = 9;  cout  < < 'Binary rightshift on bitwise1: '   < < (bitset1>>= 1) < < endl;  return 0; 


Izvade

Bitset1: 1001 Bitset2: 1010 Accessing bit value at index 1 of bitset1: 0 Bitwise AND using &: 1000 Bitwise AND using &=: 1000 Bitwise OR using |: 1011 Bitwise OR using |=: 1011 Bitwise NOT: 0100 Bitwise XOR: 0011 Binary leftshift on bitwise1: 0010 Binary rightshift on bitwise1: 0100 

Atšķirība starp std::bitset un std::vector un bool masīvu

Bool vektoru un būtības masīvu var arī ieviest, lai saglabātu Būla vērtību secību, piemēram, bitkopu, taču pastāv dažas atšķirības starp katru ieviešanu:

Parametrs

bitkopa

bula vektors

masīvs bool

Definīcija Klases veidne, kas sastāv no bitu secības, kas saglabāta tā, ka katrs bits aizņem 1 bitu atmiņas. C++ STL vektoru variants, kurā katrs elements ir 1 bita lielums un ir bool tipa Fiksēta lieluma blakus esoša būtības datu elementu kolekcija.
Izmērs Fiksēts izmērs. Dinamiskais izmērs. Fiksēts izmērs.
Atmiņa Viens elements aizņem 1 bitu atmiņas. Viens elements aizņem 1 bitu atmiņas. Viens elements aizņem 1 baitu atmiņas.
Ātrums Tas pats Tas pats Ātrāk