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 |