vector<bool>
-Klasse
Die vector<bool>
Klasse ist eine partielle Spezialisierung vector
für Elemente vom Typ bool
. Sie verfügt über eine Zuweisung für den zugrunde liegenden Typ, der von der Spezialisierung verwendet wird, die Leerzeichenoptimierung durch Speichern von einem bool
-Wert pro Bit bereitstellt.
Syntax
template <class Allocator = allocator<bool>>
class vector<bool, Allocator>
Hinweise
Diese Klassenvorlagenspezialisierung verhält sich ähnlich vector
, mit Ausnahme der Unterschiede, die in diesem Artikel erläutert werden.
Vorgänge, die den bool
-Typ betreffen, entsprechen den Werten im Containerspeicher. allocator_traits::construct
wird nicht verwendet, um diese Werte zu erstellen.
TypeDefs
Typname | Beschreibung |
---|---|
const_pointer |
Eine Typedef für ein const_iterator -Element, das als konstanter Zeiger auf ein boolesches Element des vector<bool> -Elements dienen kann. |
const_reference |
Eine Typedef für bool . Nach der Initialisierung werden keine Aktualisierungen des ursprünglichen Werts beobachtet. |
pointer |
Eine Typedef für ein iterator -Element, das als Zeiger auf ein boolesches Element des vector<bool> -Elements dienen kann. |
Memberfunktionen
Memberfunktion | Beschreibung |
---|---|
flip |
Kehrt alle Bits im vector<bool> -Element um. |
swap |
Tauscht die Elemente zweier vector<bool> n. |
operator[] |
Gibt einen simulierten Verweis auf das vector<bool> -Element an einer angegebenen Position zurück. |
at |
Funktioniert identisch mit der nicht angegebenen vector ::at-Funktion, mit der Ausnahme, dass sie die Proxyklasse vector<bool>::reference verwendet. Siehe auch operator[] . |
front |
Funktioniert identisch mit der nicht angegebenen vector ::front-Funktion, mit der Ausnahme, dass sie die Proxyklasse vector<bool>::reference verwendet. Siehe auch operator[] . |
back |
Funktioniert identisch mit der nicht angegebenen vector ::back-Funktion, mit der Ausnahme, dass sie die Proxyklasse vector<bool>::reference verwendet. Siehe auch operator[] . |
Proxyklasse
Name | Beschreibung |
---|---|
vector<bool>::reference Klasse |
Eine Klasse, die als Proxy auftritt, um bool& -Verhalten zu simulieren, und deren Objekte Verweise auf Elemente (einzelne Bits) innerhalb eines vector<bool> -Objekts bereitstellen können. |
Anforderungen
Header: <vector>
Namespace:std
vector<bool>::const_pointer
Ein Typ, der ein Objekt beschreibt, das als konstanter Zeiger auf ein boolesches Element der Sequenz dienen kann, die im vector<bool>
-Objekt enthalten ist.
typedef const_iterator const_pointer;
vector<bool>::const_reference
Ein Typ, der ein Objekt beschreibt, das als konstanter Verweis auf ein boolesches Element der Sequenz dienen kann, die im vector<bool>
-Objekt enthalten ist.
typedef bool const_reference;
Hinweise
Weitere Informationen und Codebeispiele finden Sie unter vector<bool>::reference::operator=
.
vector<bool>::flip
Kehrt alle Bits in vector<bool>
um.
void flip();
Beispiel
// vector_bool_flip.cpp
// compile with: /EHsc /W4
#include <vector>
#include <iostream>
int main()
{
using namespace std;
cout << boolalpha; // format output for subsequent code
vector<bool> vb = { true, false, false, true, true };
cout << "The vector is:" << endl << " ";
for (const auto& b : vb) {
cout << b << " ";
}
cout << endl;
vb.flip();
cout << "The flipped vector is:" << endl << " ";
for (const auto& b : vb) {
cout << b << " ";
}
cout << endl;
}
vector<bool>::operator[]
Gibt einen simulierten Verweis auf das vector<bool>
-Element an einer angegebenen Position zurück.
vector<bool>::reference operator[](size_type Pos);
vector&<bool&>::const_reference operator[](size_type Pos) const;
Parameter
Pos
Die Position des vector<bool>
-Elements.
Rückgabewert
Ein vector<bool>::reference
Oder vector<bool>::const_reference
Objekt, das den Wert des indizierten Elements enthält.
Wenn die angegebene Position größer oder gleich der Größe des Containers ist, ist das Ergebnis nicht definiert.
Hinweise
Beim Kompilieren mit festgelegtem _ITERATOR_DEBUG_LEVEL
-Wert tritt ein Laufzeitfehler auf, wenn Sie versuchen, auf ein Element außerhalb der Grenzen des Vektors zuzugreifen. Weitere Informationen finden Sie unter Checked Iterators (Überprüfte Iteratoren).
Beispiel
Dieses Codebeispiel zeigt die richtige Verwendung und vector<bool>::operator[]
zwei häufige Codierungsfehler, die auskommentiert werden. Diese Fehler verursachen Fehler, da die Adresse des vector<bool>::reference
zurückgegebenen Objekts vector<bool>::operator[]
nicht übernommen werden kann.
// cl.exe /EHsc /nologo /W4 /MTd
#include <vector>
#include <iostream>
int main()
{
using namespace std;
cout << boolalpha;
vector<bool> vb;
vb.push_back(true);
vb.push_back(false);
// bool* pb = &vb[1]; // conversion error - do not use
// bool& refb = vb[1]; // conversion error - do not use
bool hold = vb[1];
cout << "The second element of vb is " << vb[1] << endl;
cout << "The held value from the second element of vb is " << hold << endl;
// Note this doesn't modify hold.
vb[1] = true;
cout << "The second element of vb is " << vb[1] << endl;
cout << "The held value from the second element of vb is " << hold << endl;
}
The second element of vb is false
The held value from the second element of vb is false
The second element of vb is true
The held value from the second element of vb is false
vector<bool>::pointer
Ein Typ, der ein Objekt beschreibt, das als Zeiger auf ein boolesches Element der Sequenz dienen kann, die im vector<bool>
-Objekt enthalten ist.
typedef iterator pointer;
vector<bool>::reference
-Klasse
Die vector<bool>::reference
Klasse ist eine Proxyklasse, die von der vector<bool>
Klasse zum Simulieren bool&
bereitgestellt wird.
Hinweise
Ein simulierter Verweis ist erforderlich, da C++ keine direkten Verweise auf Bits nativ zulässt. vector<bool>
verwendet nur ein Bit pro Element, auf das anhand dieser Proxyklasse verwiesen werden kann. Die Referenzsimulation ist jedoch nicht abgeschlossen, da bestimmte Zuordnungen ungültig sind. Da beispielsweise die Adresse des vector<bool>::reference
Objekts nicht übernommen werden kann, ist der folgende code vector<bool>::operator[]
, der verwendet wird, nicht korrekt:
vector<bool> vb;
//...
bool* pb = &vb[1]; // conversion error - do not use
bool& refb = vb[1]; // conversion error - do not use
vector<bool>::reference::flip
Invertiert den booleschen Wert eines elements, auf das verwiesen wird vector<bool>
.
void flip();
Beispiel
// vector_bool_ref_flip.cpp
// compile with: /EHsc /W4
#include <vector>
#include <iostream>
int main()
{
using namespace std;
cout << boolalpha;
vector<bool> vb = { true, false, false, true, true };
cout << "The vector is: " << endl << " ";
for (const auto& b : vb) {
cout << b << " ";
}
cout << endl;
vector<bool>::reference vbref = vb.front();
vbref.flip();
cout << "The vector with first element flipped is: " << endl << " ";
for (const auto& b : vb) {
cout << b << " ";
}
cout << endl;
}
The vector is:
true false false true true
The vector with first element flipped is:
false false false true true
vector<bool>::reference::operator bool
Stellt eine implizite Konvertierung von vector<bool>::reference
in bool
bereit.
operator bool() const;
Rückgabewert
Der boolesche Wert des Elements des vector<bool>
Objekts.
Hinweise
Das vector<bool>
Objekt kann von diesem Operator nicht geändert werden.
vector<bool>::reference::operator=
Weist einen booleschen Wert einem Bit zu oder weist den Wert, der in einem Element enthalten ist, auf das verwiesen wird, einem Bit zu.
reference& operator=(const reference& Right);
reference& operator=(bool Val);
Parameter
Right
Der Elementverweis, dessen Wert dem Bit zugewiesen werden soll.
Val
Der boolesche Wert, der dem Bit zugewiesen werden soll.
Beispiel
// vector_bool_ref_op_assign.cpp
// compile with: /EHsc
#include <vector>
#include <iostream>
#include <string>
using namespace std;
template <typename C> void print(const string& s, const C& c) {
cout << s;
for (const auto& e : c) {
cout << e << " ";
}
cout << endl;
}
int main()
{
cout << boolalpha;
vector<bool> vb = { true, false, false, true, true };
print("The vector is: ", vb);
// Invoke vector<bool>::reference::operator=()
vector<bool>::reference refelem1 = vb[0];
vector<bool>::reference refelem2 = vb[1];
vector<bool>::reference refelem3 = vb[2];
bool b1 = refelem1;
bool b2 = refelem2;
bool b3 = refelem3;
cout << "The original value of the 1st element stored in a bool: " << b1 << endl;
cout << "The original value of the 2nd element stored in a bool: " << b2 << endl;
cout << "The original value of the 3rd element stored in a bool: " << b3 << endl;
cout << endl;
refelem2 = refelem1;
print("The vector after assigning refelem1 to refelem2 is now: ", vb);
refelem3 = true;
print("The vector after assigning false to refelem1 is now: ", vb);
// The initial values are still stored in the bool variables and remained unchanged
cout << "The original value of the 1st element still stored in a bool: " << b1 << endl;
cout << "The original value of the 2nd element still stored in a bool: " << b2 << endl;
cout << "The original value of the 3rd element still stored in a bool: " << b3 << endl;
cout << endl;
}
The vector is: true false false true true
The original value of the 1st element stored in a bool: true
The original value of the 2nd element stored in a bool: false
The original value of the 3rd element stored in a bool: false
The vector after assigning refelem1 to refelem2 is now: true true false true true
The vector after assigning false to refelem1 is now: true true true true true
The original value of the 1st element still stored in a bool: true
The original value of the 2nd element still stored in a bool: false
The original value of the 3rd element still stored in a bool: false
vector<bool>::swap
Statische Memberfunktion, die zwei Elemente von booleschen Vektoren ( vector<bool>
) mithilfe der Proxyklasse vector<bool>::reference
austauscht.
static void swap(
reference Left,
reference Right);
Parameter
Left
Das Element, das mit dem Right
-Element ausgetauscht werden soll.
Right
Das Element, das mit dem Left
-Element ausgetauscht werden soll.
Hinweise
Diese Überladung unterstützt die besonderen Proxyanforderungen von vector<bool>
. vector
::swap verfügt über die gleiche Funktionalität wie die Überladung mit vector<bool>::swap()
einem Argument.
Siehe auch
Threadsicherheit in der C++-Standardbibliothek
C++-Standardbibliotheksreferenz