Freigeben über


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>::referenceverwendet. Siehe auch operator[].
front Funktioniert identisch mit der nicht angegebenen vector::front-Funktion, mit der Ausnahme, dass sie die Proxyklasse vector<bool>::referenceverwendet. Siehe auch operator[].
back Funktioniert identisch mit der nicht angegebenen vector::back-Funktion, mit der Ausnahme, dass sie die Proxyklasse vector<bool>::referenceverwendet. 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>::referenceaustauscht.

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