std:: vector<bool>
|
Definiert im 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, in der
std
::
vector
<
bool
>
speicherplatzeffizient gestaltet wird (sowie ob überhaupt optimiert wird), ist implementierungsdefiniert. Eine mögliche Optimierung besteht darin, Vektorelemente so zusammenzufassen, 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 Folgendes:
- 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[] als Wert zurückgegeben. - Verwendet nicht std :: allocator_traits :: construct zum Konstruieren von Bit-Werten.
- Garantiert nicht, dass verschiedene Elemente im selben Container gleichzeitig von verschiedenen Threads geändert werden können.
Inhaltsverzeichnis |
Mitgliedertypen
| Mitgliedertyp | Definition | ||||
value_type
|
bool | ||||
allocator_type
|
Allocator
|
||||
size_type
|
implementierungsdefiniert | ||||
difference_type
|
implementierungsdefiniert | ||||
|
Proxy-Klasse, die eine Referenz auf einen einzelnen
bool
repräsentiert
(Klasse) |
|||||
const_reference
|
bool | ||||
pointer
|
implementierungsdefiniert | ||||
const_pointer
|
implementierungsdefiniert | ||||
iterator
|
|
||||
const_iterator
|
|
||||
reverse_iterator
|
std:: reverse_iterator < iterator > | ||||
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > |
Memberfunktionen
konstruiert den
vector
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
zerstört den
vector
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
weist dem Container Werte zu
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
weist dem Container Werte zu
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
(C++23)
|
weist dem Container einen Wertebereich zu
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
gibt den zugehörigen Allokator zurück
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
Elementzugriff |
|
|
Zugriff auf bestimmtes Element mit Grenzprüfung
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
Zugriff auf spezifisches Element
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
greift auf das erste Element zu
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
greift auf das letzte Element zu
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
Iteratoren |
|
|
(C++11)
|
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
(C++11)
|
gibt einen Iterator zum Ende zurück
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
(C++11)
|
gibt einen Reverse-Iterator zum Anfang zurück
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
(C++11)
|
gibt einen umgekehrten Iterator zum Ende zurück
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
Kapazität |
|
|
prüft, ob der Container leer ist
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
gibt die Anzahl der Elemente zurück
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
gibt die maximal mögliche Anzahl von Elementen zurück
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
reserviert Speicherplatz
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
gibt die Anzahl der Elemente zurück, die im aktuell allozierten Speicher gehalten werden können
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
Modifikatoren |
|
|
löscht den Inhalt
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
fügt Elemente ein
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
(C++23)
|
fügt eine Reihe von Elementen ein
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
(C++23)
|
fügt eine Reihe von Elementen am Ende hinzu
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
(C++11)
|
Konstruiert Element direkt an Ort und Stelle
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
löscht Elemente
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
fügt ein Element am Ende hinzu
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
(C++11)
|
Konstruiert ein Element direkt am Ende
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
entfernt das letzte Element
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
ändert die Anzahl der gespeicherten Elemente
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
tauscht die Inhalte aus
(öffentliche Elementfunktion von
std::vector<T,Allocator>
)
|
|
|
|
|
dreht alle Bits um
(öffentliche Elementfunktion) |
|
|
[static]
|
tauscht zwei
std::vector<bool>::
reference
s
(öffentliche statische Elementfunktion) |
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 zwei
vector
-Werte lexikographisch
(Funktionstemplate) |
|
spezialisiert den
std::swap
-Algorithmus
(Funktionstemplate) |
|
|
löscht alle Elemente, die bestimmte Kriterien erfüllen
(Funktionstemplate) |
Hilfsklassen
|
(C++11)
|
Hash-Unterstützung für
std
::
vector
<
bool
>
(Klassen-Template-Spezialisierung) |
Deduktionsleitfäden (C++17)
Hinweise
Wenn die Größe des Bitsets zur Compile-Zeit bekannt ist,
std::bitset
kann verwendet werden, das einen umfangreicheren Satz an Member-Funktionen bietet. Zusätzlich existiert
boost::dynamic_bitset
als Alternative zu
std
::
vector
<
bool
>
.
Da seine Darstellung möglicherweise optimiert ist,
erfüllt
std
::
vector
<
bool
>
nicht notwendigerweise alle
Container
- oder
SequenceContainer
-Anforderungen. Beispielsweise erfüllt
std
::
vector
<
bool
>
::
iterator
möglicherweise nicht die
LegacyForwardIterator
-Anforderung, da er implementierungsdefiniert ist. Die Verwendung von Algorithmen wie
std::search
, die
LegacyForwardIterator
s
erfordern, kann zu
Kompilierzeit- 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) | Ranges-Konstruktion und -Einfügung für Container |
Beispiel
#include <cassert> #include <initializer_list> #include <iostream> #include <vector> void println(auto rem, const std::vector<bool>& vb) { std::cout << rem << " = ["; for (std::size_t t{}; t != vb.size(); ++t) std::cout << (t ? ", " : "") << vb[t]; std::cout << "]\n"; } int main() { std::vector<bool> v1; // erstellt einen leeren Vektor von booleschen Werten println("1) v1", v1); std::vector<bool> v2{0, 1, 1, 0, 1}; // erstellt einen gefüllten Vektor println("2) v2", v2); v1 = v2; // kopiert v2 nach v1 println("3) v1", v1); assert(v1.size() == v2.size()); // prüft, ob v1 und v2 gleiche Größe haben assert(v1.front() == false); // greift auf erstes Element zu, äquivalent zu: assert(v1[0] == false); assert(v1.back() == true); // greift auf letztes Element zu, äquivalent zu: assert(v1[v1.size() - 1] == true); v1 = {true, true, false, false}; // weist eine Initialisierungsliste zu println("4) v1", v1); v1.push_back(true); // fügt ein Element am Ende hinzu println("5) v1", v1); v1.pop_back(); // entfernt ein Element vom Ende println("6) v1", v1); v1.flip(); // invertiert alle Elemente println("7) v1", v1); v1.resize(8, true); // ändert die Größe von v1; neue Elemente werden auf "true" gesetzt println("8) v1", v1); v1.clear(); // löscht v1 assert(v1.empty()); // prüft, ob v1 leer ist }
Ausgabe:
1) v1 = [] 2) v2 = [0, 1, 1, 0, 1] 3) v1 = [0, 1, 1, 0, 1] 4) v1 = [1, 1, 0, 0] 5) v1 = [1, 1, 0, 0, 1] 6) v1 = [1, 1, 0, 0] 7) v1 = [0, 0, 1, 1] 8) v1 = [0, 0, 1, 1, 1, 1, 1, 1]
Fehlerberichte
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
Memberfunktionen
|
hinzugefügt |