Dela via


vector<bool>-klass

Klassen vector<bool> är en partiell specialisering av vector för element av typen bool. Den har en allokering för den underliggande typen som används av specialiseringen, vilket ger utrymmesoptimering genom att lagra ett bool värde per bit.

Syntax

template <class Allocator = allocator<bool>>
class vector<bool, Allocator>

Anmärkningar

Specialiseringen för den här klassmallen fungerar som , förutom de skillnader som vectorbeskrivs i den här artikeln.

Åtgärder som hanterar bool typen motsvarar värden i containerlagringen. allocator_traits::construct används inte för att konstruera dessa värden.

Typedefs

Typnamn Beskrivning
const_pointer En typedef till en const_iterator som kan fungera som en konstant pekare till ett booleskt element i vector<bool>.
const_reference En typedef för bool. Efter initieringen observeras inte uppdateringar av det ursprungliga värdet.
pointer En typedef till en iterator som kan fungera som en pekare till ett booleskt element i vector<bool>.

Medlemsfunktioner

Medlemsfunktion Beskrivning
flip Omvänt alla bitar i vector<bool>.
swap Utbyter elementen i två vector<bool>s.
operator[] Returnerar en simulerad referens till elementet vector<bool> vid en angiven position.
at Fungerar på samma sätt som den ospecialiserade vectorfunktionen ::at, förutom att den använder proxyklassen vector<bool>::reference. Se även operator[].
front Fungerar på samma sätt som den ospecialiserade vectorfunktionen ::front, förutom att den använder proxyklassen vector<bool>::reference. Se även operator[].
back Fungerar på samma sätt som den ospecialiserade vectorfunktionen ::back, förutom att den använder proxyklassen vector<bool>::reference. Se även operator[].

Proxyklass

Namn Beskrivning
vector<bool>::reference klass En klass som fungerar som en proxy för att simulera bool& beteende och vars objekt kan ge referenser till element (enkla bitar) i ett vector<bool> objekt.

Kravspecifikation

Rubrik: <vector>

Namespace:std

vector<bool>::const_pointer

En typ som beskriver ett objekt som kan fungera som en konstant pekare till ett booleskt element i sekvensen vector<bool> som objektet innehåller.

typedef const_iterator const_pointer;

vector<bool>::const_reference

En typ som beskriver ett objekt som kan fungera som en konstant referens till ett booleskt element i sekvensen vector<bool> som objektet innehåller.

typedef bool const_reference;

Anmärkningar

Mer information och kodexempel finns i vector<bool>::reference::operator=.

vector<bool>::flip

Omvänt alla bitar i en vector<bool>.

void flip();

Exempel

// 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[]

Returnerar en simulerad referens till elementet vector<bool> vid en angiven position.

vector<bool>::reference operator[](size_type Pos);

vector&<bool&>::const_reference operator[](size_type Pos) const;

Parameterar

Pos
Elementets vector<bool> position.

Returvärde

Ett vector<bool>::reference eller vector<bool>::const_reference -objekt som innehåller värdet för det indexerade elementet.

Om den angivna positionen är större än eller lika med containerns storlek är resultatet odefinierat.

Anmärkningar

Om du kompilerar med _ITERATOR_DEBUG_LEVEL set uppstår ett körningsfel om du försöker komma åt ett element utanför vektorns gränser. Mer information finns i Kontrollerade iteratorer.

Exempel

Det här kodexemplet visar korrekt användning av vector<bool>::operator[] och två vanliga kodfel som kommenteras ut. Dessa misstag orsakar fel eftersom adressen för objektet vector<bool>::reference som vector<bool>::operator[] returnerar inte kan tas.

// 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

En typ som beskriver ett objekt som kan fungera som pekare till ett booleskt element i sekvensen vector<bool> som objektet innehåller.

typedef iterator pointer;

vector<bool>::reference-klass

Klassen vector<bool>::reference är en proxyklass som tillhandahålls av vector<bool> klassen för att simulera bool&.

Anmärkningar

En simulerad referens krävs eftersom C++ inte tillåter direkta referenser till bitar. vector<bool> använder bara en bit per element, vilket kan refereras med hjälp av den här proxyklassen. Referenssimuleringen är dock inte klar eftersom vissa tilldelningar inte är giltiga. Eftersom det till exempel inte går att ta objektets adress vector<bool>::reference är följande kod som använder vector<bool>::operator[] inte 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

Invertera det booleska värdet för ett refererat vector<bool> element.

void flip();

Exempel

// 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

Tillhandahåller en implicit konvertering från vector<bool>::reference till bool.

operator bool() const;

Returvärde

Det booleska värdet för objektets vector<bool> element.

Anmärkningar

Det vector<bool> går inte att ändra objektet av den här operatorn.

vector<bool>::reference::operator=

Tilldelar ett booleskt värde till en bit, eller värdet som innehas av ett refererat element till en bit.

reference& operator=(const reference& Right);
reference& operator=(bool Val);

Parameterar

Right
Elementreferensen vars värde ska tilldelas till biten.

Val
Det booleska värde som ska tilldelas till biten.

Exempel

// 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

Statisk medlemsfunktion som utbyter två element i booleska vektorer (vector<bool>) med hjälp av proxyklassen vector<bool>::reference.

static void swap(
    reference Left,
    reference Right);

Parameterar

Left
Det element som ska bytas ut med -elementet Right .

Right
Det element som ska bytas ut med -elementet Left .

Anmärkningar

Den här överlagringen stöder de särskilda proxykraven för vector<bool>. vector::swap har samma funktioner som överlagringen med ett argument för vector<bool>::swap().

Se även

Trådsäkerhet i C++ Standard Library
Standardbiblioteksreferens för C++