std::bitset
| Definiert in der Header-Datei <bitset> |
||
| template< std::size_t N > class bitset; |
||
Die Klassenschablone bitset repräsentiert eine feste Sequenz von N Bits. Bitsets können mit Standard-Logikoperatoren manipuliert und in und aus Zeichenketten und ganzen Zahlen konvertiert werden. Für die Zwecke der Zeichenkettenrepräsentation und der Benennung von Richtungen für Schiebeoperationen wird die Sequenz so betrachtet, als ob ihre Elemente mit dem niedrigsten Index sich rechts befinden, wie in der Binärdarstellung von ganzen Zahlen.
bitset erfüllt die Anforderungen an CopyConstructible und CopyAssignable.
|
Alle Memberfunktionen von |
(seit C++23) |
Inhalt |
[edit] Template-Parameter
| N | - | die Anzahl der Bits, für die Speicherplatz zugewiesen werden soll |
[edit] Membertypen
| Proxy-Klasse, die eine Referenz auf ein Bit repräsentiert (Klasse) |
[edit] Memberfunktionen
| konstruiert das Bitset (public member function) | |
| (in C++20 entfernt) |
vergleicht den Inhalt (public member function) |
Elementzugriff | |
| greift auf ein bestimmtes Bit zu (public member function) | |
| greift auf ein bestimmtes Bit zu (public member function) | |
| prüft, ob alle, einige oder keine der Bits auf true gesetzt sind (public member function) | |
| gibt die Anzahl der auf true gesetzten Bits zurück (public member function) | |
Kapazität | |
| gibt die Anzahl der Bits zurück, die das Bitset enthält (public member function) | |
Modifizierer | |
| führt binäre AND-, OR-, XOR- und NOT-Operationen durch (public member function) | |
| führt binäre Links- und Rechtsschiebeoperationen durch (public member function) | |
| setzt Bits auf true oder auf einen gegebenen Wert (public member function) | |
| setzt Bits auf false (public member function) | |
| vertauscht die Werte von Bits (public member function) | |
Konvertierungen | |
| gibt eine Zeichenkettenrepräsentation der Daten zurück (public member function) | |
| gibt eine unsigned long-Ganzzahlrepräsentation der Daten zurück (public member function) | |
| (C++11) |
gibt eine unsigned long long-Ganzzahlrepräsentation der Daten zurück (public member function) |
[edit] Nicht-Memberfunktionen
| führt binäre Logikoperationen auf Bitsets durch (function template) | |
| führt Stream-Ein- und -Ausgabe von Bitsets durch (function template) |
[edit] Hilfsklassen
| (C++11) |
Hash-Unterstützung für std::bitset (Klassentemplate-Spezialisierung) |
[edit] Hinweise
Wenn die Größe eines Bit-Sets zur Kompilierzeit nicht bekannt ist oder seine Größe zur Laufzeit geändert werden muss, können dynamische Typen wie std::vector<bool> oder boost::dynamic_bitset<> stattdessen verwendet werden.
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_constexpr_bitset |
202207L |
(C++23) | Ein constexpr-fähigeres std::bitset |
__cpp_lib_bitset |
202306L |
(C++26) | Schnittstellen von std::bitset mit std::string_view |
[edit] Beispiel
#include <bitset> #include <cassert> #include <cstddef> #include <iostream> int main() { typedef std::size_t length_t, position_t; // the hints // constructors: constexpr std::bitset<4> b1; constexpr std::bitset<4> b2{0xA}; // == 0B1010 std::bitset<4> b3{"0011"}; // can also be constexpr since C++23 std::bitset<8> b4{"ABBA", length_t(4), /*0:*/'A', /*1:*/'B'}; // == 0B0000'0110 // bitsets can be printed out to a stream: std::cout << "b1:" << b1 << "; b2:" << b2 << "; b3:" << b3 << "; b4:" << b4 << '\n'; // bitset supports bitwise operations: b3 |= 0b0100; assert(b3 == 0b0111); b3 &= 0b0011; assert(b3 == 0b0011); b3 ^= std::bitset<4>{0b1100}; assert(b3 == 0b1111); // operations on the whole set: b3.reset(); assert(b3 == 0); b3.set(); assert(b3 == 0b1111); assert(b3.all() && b3.any() && !b3.none()); b3.flip(); assert(b3 == 0); // operations on individual bits: b3.set(position_t(1), true); assert(b3 == 0b0010); b3.set(position_t(1), false); assert(b3 == 0); b3.flip(position_t(2)); assert(b3 == 0b0100); b3.reset(position_t(2)); assert(b3 == 0); // subscript operator[] is supported: b3[2] = true; assert(true == b3[2]); // other operations: assert(b3.count() == 1); assert(b3.size() == 4); assert(b3.to_ullong() == 0b0100ULL); assert(b3.to_string() == "0100"); }
Ausgabe
b1:0000; b2:1010; b3:0011; b4:00000110
[edit] Siehe auch
| speichereffizientes dynamisches Bitset (class template specialization) | |
| Bitmanipulation (C++20) | Dienstprogramme zum Zugriff, zur Manipulation und zur Verarbeitung einzelner Bits und Bitsequenzen |