std::vector<bool>
| Definiert in Header <vector> |
||
| template< class Allocator |
||
std::vector<bool> ist eine möglicherweise speichereffiziente Spezialisierung von std::vector für den Typ bool.
Die Art und Weise, wie std::vector<bool> speichereffizient gemacht wird (und ob sie überhaupt optimiert wird), ist implementierungsabhängig. Eine mögliche Optimierung besteht darin, Vektorelemente so zu verketten, dass jedes Element ein einzelnes Bit belegt, anstatt sizeof(bool) Bytes.
std::vector<bool> verhält sich ähnlich wie std::vector, aber um speichereffizient zu sein, tut es
- speichert seine Elemente nicht unbedingt als zusammenhängendes Array.
- stellt die Klasse std::
vector<bool>::referenceals Methode zum Zugriff auf einzelne Bits bereit. Insbesondere werden Objekte dieser Klasse von operator[] nach Wert zurückgegeben. - verwendet nicht std::allocator_traits::construct, um Bitwerte zu konstruieren.
- garantiert nicht, dass verschiedene Elemente im selben Container gleichzeitig von verschiedenen Threads modifiziert werden können.
Inhalt |
[edit] Member-Typen
| Mitgliedertyp | Definition | ||||
value_type
|
bool | ||||
allocator_type
|
Allocator | ||||
size_type
|
implementierungsabhängig | ||||
difference_type
|
implementierungsabhängig | ||||
| Proxy-Klasse, die eine Referenz auf ein einzelnes bool repräsentiert (Klasse) | |||||
const_reference
|
bool | ||||
Zeiger
|
implementierungsabhängig | ||||
const_pointer
|
implementierungsabhängig | ||||
iterator
|
| ||||
const_iterator
|
| ||||
reverse_iterator
|
std::reverse_iterator<iterator> | ||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
[edit] Member-Funktionen
konstruiert den vector(public member function of std::vector<T,Allocator>) | |
zerstört den vector(public member function of std::vector<T,Allocator>) | |
| weist dem Container Werte zu (public member function of std::vector<T,Allocator>) | |
| weist dem Container Werte zu (public member function of std::vector<T,Allocator>) | |
| (C++23) |
weist dem Container einen Bereich von Werten zu (public member function of std::vector<T,Allocator>) |
| gibt den zugehörigen Allocator zurück (public member function of std::vector<T,Allocator>) | |
Elementzugriff | |
| Greift mit Überprüfung auf ein bestimmtes Element zu (public member function of std::vector<T,Allocator>) | |
| Greift auf ein bestimmtes Element zu (öffentliche Memberfunktion von std::vector<T,Allocator>) | |
| Greift auf das erste Element zu (public member function of std::vector<T,Allocator>) | |
| Greift auf das letzte Element zu (public member function of std::vector<T,Allocator>) | |
Iteratoren | |
| (C++11) |
gibt einen Iterator zum Anfang zurück (public member function of std::vector<T,Allocator>) |
| (C++11) |
gibt einen Iterator zum Ende zurück (public member function of std::vector<T,Allocator>) |
| (C++11) |
gibt einen Reverse-Iterator zum Anfang zurück (public member function of std::vector<T,Allocator>) |
| (C++11) |
gibt einen Reverse-Iterator zum Ende zurück (public member function of std::vector<T,Allocator>) |
Kapazität | |
| prüft, ob der Container leer ist (public member function of std::vector<T,Allocator>) | |
| Gibt die Anzahl der Elemente zurück (public member function of std::vector<T,Allocator>) | |
| Gibt die maximal mögliche Anzahl von Elementen zurück (public member function of std::vector<T,Allocator>) | |
| reserviert Speicher (public member function of std::vector<T,Allocator>) | |
| Gibt die Anzahl der Elemente zurück, die im derzeit zugewiesenen Speicher gehalten werden können (public member function of std::vector<T,Allocator>) | |
Modifizierer | |
| leert den Inhalt (public member function of std::vector<T,Allocator>) | |
| fügt Elemente ein (public member function of std::vector<T,Allocator>) | |
| (C++23) |
fügt einen Bereich von Elementen ein (public member function of std::vector<T,Allocator>) |
| (C++23) |
fügt einen Bereich von Elementen am Ende hinzu (public member function of std::vector<T,Allocator>) |
| (C++11) |
konstruiert Elemente direkt (in-place) (public member function of std::vector<T,Allocator>) |
| entfernt Elemente (public member function of std::vector<T,Allocator>) | |
| fügt ein Element am Ende hinzu (public member function of std::vector<T,Allocator>) | |
| (C++11) |
konstruiert ein Element direkt (in-place) am Ende (public member function of std::vector<T,Allocator>) |
| entfernt das letzte Element (public member function of std::vector<T,Allocator>) | |
| ändert die Anzahl der gespeicherten Elemente (public member function of std::vector<T,Allocator>) | |
| tauscht die Inhalte (public member function of std::vector<T,Allocator>) | |
spezifische Modifikatoren von
| |
| dreht alle Bits um (public member function) | |
| [static] |
tauscht zwei std::vector<bool>::references(public static member function) |
[edit] Nicht-Member-Funktionen
| (entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(C++20) |
vergleicht lexikographisch die Werte zweier vectors(function template) |
| spezialisiert den Algorithmus std::swap (function template) | |
| entfernt alle Elemente, die bestimmte Kriterien erfüllen (function template) |
[edit] Hilfsklassen
| (C++11) |
Hash-Unterstützung für std::vector<bool> (class template specialization) |
[edit] Deduktionsführungen (C++17)
[edit] Hinweise
Wenn die Größe des Bitsets zur Compile-Zeit bekannt ist, kann std::bitset verwendet werden, das eine reichhaltigere Auswahl an Member-Funktionen bietet. Darüber hinaus existiert boost::dynamic_bitset als Alternative zu std::vector<bool>.
Da seine Darstellung optimiert sein kann, erfüllt std::vector<bool> nicht zwangsläufig alle Container- oder SequenceContainer-Anforderungen. Da zum Beispiel std::vector<bool>::iterator implementierungsabhängig ist, erfüllt er möglicherweise nicht die LegacyForwardIterator-Anforderung. Die Verwendung von Algorithmen wie std::search, die LegacyForwardIterators benötigen, kann zu Kompilierungs- oder Laufzeitfehlern führen.
Die Boost.Container-Version von vector spezialisiert nicht für bool.
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Bereichskonstruktion und -einfügung für Container |
[edit] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[edit] Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2187 | C++11 | Spezialisierungen für bool fehlten emplace und emplace_back Member-Funktionen |
hinzugefügt |