Namensräume
Varianten
Aktionen

std::vector<bool>

Von cppreference.com
< cpp‎ | container
 
 
 
 
Definiert in Header <vector>
template<

    class Allocator

> class vector<bool, 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>::reference als 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[edit]
allocator_type Allocator[edit]
size_type implementierungsabhängig[edit]
difference_type implementierungsabhängig[edit]
Proxy-Klasse, die eine Referenz auf ein einzelnes bool repräsentiert
(Klasse)
const_reference bool[edit]
Zeiger implementierungsabhängig[edit]
const_pointer implementierungsabhängig[edit]
iterator

implementierungsdefiniert

(bis C++20)

implementierungsabhängiger ConstexprIterator

(seit C++20)
[Bearbeiten]
const_iterator

implementierungsdefiniert

(bis C++20)

implementierungsabhängiger ConstexprIterator

(seit C++20)
[Bearbeiten]
reverse_iterator std::reverse_iterator<iterator>[edit]
const_reverse_iterator std::reverse_iterator<const_iterator>[edit]

[edit] Member-Funktionen

konstruiert den vector
(public member function of std::vector<T,Allocator>) [edit]
zerstört den vector
(public member function of std::vector<T,Allocator>) [edit]
weist dem Container Werte zu
(public member function of std::vector<T,Allocator>) [edit]
weist dem Container Werte zu
(public member function of std::vector<T,Allocator>) [edit]
weist dem Container einen Bereich von Werten zu
(public member function of std::vector<T,Allocator>) [edit]
gibt den zugehörigen Allocator zurück
(public member function of std::vector<T,Allocator>) [edit]
Elementzugriff
Greift mit Überprüfung auf ein bestimmtes Element zu
(public member function of std::vector<T,Allocator>) [edit]
Greift auf ein bestimmtes Element zu
(öffentliche Memberfunktion von std::vector<T,Allocator>) [bearbeiten]
Greift auf das erste Element zu
(public member function of std::vector<T,Allocator>) [edit]
Greift auf das letzte Element zu
(public member function of std::vector<T,Allocator>) [edit]
Iteratoren
gibt einen Iterator zum Anfang zurück
(public member function of std::vector<T,Allocator>) [edit]
(C++11)
gibt einen Iterator zum Ende zurück
(public member function of std::vector<T,Allocator>) [edit]
gibt einen Reverse-Iterator zum Anfang zurück
(public member function of std::vector<T,Allocator>) [edit]
(C++11)
gibt einen Reverse-Iterator zum Ende zurück
(public member function of std::vector<T,Allocator>) [edit]
Kapazität
prüft, ob der Container leer ist
(public member function of std::vector<T,Allocator>) [edit]
Gibt die Anzahl der Elemente zurück
(public member function of std::vector<T,Allocator>) [edit]
Gibt die maximal mögliche Anzahl von Elementen zurück
(public member function of std::vector<T,Allocator>) [edit]
reserviert Speicher
(public member function of std::vector<T,Allocator>) [edit]
Gibt die Anzahl der Elemente zurück, die im derzeit zugewiesenen Speicher gehalten werden können
(public member function of std::vector<T,Allocator>) [edit]
Modifizierer
leert den Inhalt
(public member function of std::vector<T,Allocator>) [edit]
fügt Elemente ein
(public member function of std::vector<T,Allocator>) [edit]
fügt einen Bereich von Elementen ein
(public member function of std::vector<T,Allocator>) [edit]
fügt einen Bereich von Elementen am Ende hinzu
(public member function of std::vector<T,Allocator>) [edit]
(C++11)
konstruiert Elemente direkt (in-place)
(public member function of std::vector<T,Allocator>) [edit]
entfernt Elemente
(public member function of std::vector<T,Allocator>) [edit]
fügt ein Element am Ende hinzu
(public member function of std::vector<T,Allocator>) [edit]
konstruiert ein Element direkt (in-place) am Ende
(public member function of std::vector<T,Allocator>) [edit]
entfernt das letzte Element
(public member function of std::vector<T,Allocator>) [edit]
ändert die Anzahl der gespeicherten Elemente
(public member function of std::vector<T,Allocator>) [edit]
tauscht die Inhalte
(public member function of std::vector<T,Allocator>) [edit]
spezifische Modifikatoren von vector<bool>
dreht alle Bits um
(public member function) [edit]
[static]
tauscht zwei std::vector<bool>::references
(public static member function) [edit]

[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) [edit]
spezialisiert den Algorithmus std::swap
(function template) [edit]
entfernt alle Elemente, die bestimmte Kriterien erfüllen
(function template) [edit]

[edit] Hilfsklassen

Hash-Unterstützung für std::vector<bool>
(class template specialization) [edit]

[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

[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