Bitová sada je pole boolů, ale každá booleovská hodnota není místo toho uložena v samostatném bajtu, bitová sada optimalizuje prostor tak, aby každá booleovská hodnota zabírá pouze 1bitový prostor , tak prostor zabraný bitovou sadou je menší než u pole bool nebo vektoru bool .
Omezení bitsetu je to velikost musí být známa v době kompilace, tj. velikost bitové sady je pevná.
std::bitset je šablona třídy pro bitovou sadu, která je definována uvnitř hlavičkový soubor takže před použitím bitset v našem programu musíme zahrnout hlavičkový soubor.
rychlé třídění
Syntax:
bitset variable_name(initialization);>
Bitset můžeme inicializovat třemi způsoby:
1. Neinicializováno: Všechny bity budou nastaveny na nulu.
bitset variable_name;>
2. Inicializace s dekadickým celým číslem: Bitset bude reprezentovat dané dekadické číslo v binární podobě.
bitset variable_name(DECIMAL_NUMBER);>
3. Inicializace pomocí binárního řetězce: Bitset bude reprezentovat daný binární řetězec.
bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING');>Příklad:
C++ // C++ program to demonstrate the bitset #include #include using namespace std; int main() { // declaring an uninitialized bitset object bitset<8>neinicializovanáBitset; // inicializace s bitovou sadou desetinných čísel<8>decimalBitset(15); // inicializace pomocí bitové sady binárních řetězců<8>stringBitset(string('1111')); cout<< 'Uninitialized bitset: ' << uninitializedBitset << endl; cout << 'Initialized with decimal: ' << decimalBitset << endl; cout << 'Initialized with string: ' << stringBitset << endl; return 0; }> Výstup
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111>
std::bitset členské funkce
Třída std::bitset obsahuje některé užitečné členské funkce pro práci s objekty bitset. Zde je seznam některých členských funkcí std::bitset:
Název funkce | Popis funkce |
|---|---|
soubor() | Nastav bitovou hodnotu na daném indexu do 1 . |
reset() | Nastav bitovou hodnotu na daném indexu na 0 . |
převrátit () | Překlopte hodnotu bitu na daném indexu. |
počet() restartujte mysql ubuntu | Počet počet nastavit bity . |
test() | Vrátí booleovská hodnota na daném indexu . |
žádný() | Kontroluje, zda žádný bit je soubor . |
žádný() | Kontroluje, zda žádný bit je soubor. |
Všechno() | Zkontrolujte, zda Všechno bit je soubor. |
velikost() | Vrátí velikost bitsetu. |
to_string() | Převádí bitset na std::string. |
následovat() | Převádí bitset na unsigned long. |
to_ullong() | Převádí bitset na unsigned long long. |
Příklad:
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; }> Výstup
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>
Poznámka: boolalpha se používá k tisku true a false místo 1 nebo 0 pro booleovské hodnoty a noboolalpha pro opačné hodnoty.
std::bitset Operátoři
Některé ze základních operátorů jsou přetížené pro práci s objekty bitset. Níže je uveden seznam těchto operátorů:
Operátor | Úkon |
|---|---|
[] | Přístup operátor |
& | bitový A |
| | bitový NEBO |
! | bitový VOLNÝ, UVOLNIT |
>>= | Binární Pravý posun a přiřadit |
<<= | Binární Levý Shift a přiřadit |
&= | Přiřaďte hodnotu bitově A do prvního bitsetu. |
|= | Přiřaďte hodnotu bitově NEBO do prvního bitsetu. |
^= | Přiřaďte hodnotu bitově VOLNÝ, UVOLNIT do prvního bitsetu. |
~ | bitový NE |
Příklad:
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;>
Výstup
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>
Rozdíl mezi std::bitset a std::vector a polem bool
Vektor bool a pole bool lze také implementovat pro uložení sekvence booleovských hodnot, jako je bitset, ale mezi každou implementací existují určité rozdíly:
| Parametr | bitset listnode java | vektor bool | pole bool |
|---|---|---|---|
| Definice | Šablona třídy sestávající ze sekvence bitů uložených tak, že každý bit zabírá 1 bit paměti. | Variace vektorů C++ STL, ve kterých má každý prvek velikost 1 bit a je typu bool | Souvislá kolekce boolových datových prvků s pevnou velikostí. |
| Velikost | Pevná velikost. | Dynamická velikost. | Pevná velikost. |
| Paměť | Jeden prvek zabírá 1 bit paměti. | Jeden prvek zabírá 1 bit paměti. | Jeden prvek zabírá 1 bajt paměti. |
| Rychlost | Stejný | Stejný | Rychleji |