vector<bool> Klasa

Klasa vector<bool> jest częściową specjalizacją vector elementów typu bool. Ma alokator dla bazowego typu używanego przez specjalizację, który zapewnia optymalizację przestrzeni, przechowując jedną bool wartość na bit.

Składnia

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

Uwagi

Ta specjalizacja szablonu klasy zachowuje się jak vector, z wyjątkiem różnic opisanych w tym artykule.

Operacje, które zajmują się typem bool , odpowiadają wartościom w magazynie kontenerów. allocator_traits::construct nie jest używana do konstruowania tych wartości.

Typedefs

Nazwa typu opis
const_pointer Definicja typu const_iterator , która może służyć jako stały wskaźnik do elementu logicznego elementu vector<bool>.
const_reference Definicja typu dla elementu bool. Po zainicjowaniu nie obserwuje aktualizacji oryginalnej wartości.
pointer Definicja typu iterator , która może służyć jako wskaźnik do elementu logicznego elementu vector<bool>.

Funkcje składowe

Funkcja składowa opis
flip Odwraca wszystkie bity w obiekcie vector<bool>.
swap Wymienia elementy dwóch vector<bool>s.
operator[] Zwraca symulowane odwołanie do vector<bool> elementu w określonej pozycji.
at Funkcja działa tak samo jak niespecjalizowana vectorfunkcja ::at, z tą różnicą, że używa klasy vector<bool>::referenceserwera proxy . Zobacz operator[]też .
front Funkcje takie same jak niespecjalizowana vectorfunkcja ::front, z tą różnicą, że używa klasy vector<bool>::referenceserwera proxy . Zobacz operator[]też .
back Funkcje takie same jak niespecjalizowana vectorfunkcja ::back, z tą różnicą, że używa klasy vector<bool>::referenceserwera proxy . Zobacz operator[]też .

Klasa proxy

Nazwa/nazwisko opis
vector<bool>::reference Klasa Klasa, która działa jako serwer proxy do symulowania bool& zachowania i którego obiekty mogą dostarczać odwołania do elementów (pojedynczych bitów) w vector<bool> obiekcie.

Wymagania

Nagłówek: <vector>

Obszaru nazw:std

vector<bool>::const_pointer

Typ opisujący obiekt, który może służyć jako stały wskaźnik do elementu logicznego sekwencji zawartej vector<bool> przez obiekt.

typedef const_iterator const_pointer;

vector<bool>::const_reference

Typ opisujący obiekt, który może służyć jako stałe odwołanie do elementu logicznego sekwencji zawartej vector<bool> przez obiekt.

typedef bool const_reference;

Uwagi

Aby uzyskać więcej informacji i przykładów kodu, zobacz vector<bool>::reference::operator=.

vector<bool>::flip

Odwraca wszystkie bity w obiekcie vector<bool>.

void flip();

Przykład

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

Zwraca symulowane odwołanie do vector<bool> elementu w określonej pozycji.

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

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

Parametry

Pos
Położenie vector<bool> elementu.

Wartość zwracana

Obiekt vector<bool>::reference lub vector<bool>::const_reference zawierający wartość indeksowanego elementu.

Jeśli określona pozycja jest większa niż lub równa rozmiarowi kontenera, wynik jest niezdefiniowany.

Uwagi

Jeśli kompilujesz z _ITERATOR_DEBUG_LEVEL zestawem, w przypadku próby uzyskania dostępu do elementu poza granicami wektora wystąpi błąd czasu wykonywania. Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.

Przykład

W tym przykładzie kodu pokazano poprawne użycie vector<bool>::operator[] i dwa typowe błędy kodowania, które zostały skomentowane. Te błędy powodują błędy, ponieważ nie można podjąć adresu zwracanego vector<bool>::reference obiektu vector<bool>::operator[] .

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

Typ opisujący obiekt, który może służyć jako wskaźnik do elementu logicznego sekwencji zawartej vector<bool> przez obiekt.

typedef iterator pointer;

vector<bool>::reference Klasa

Klasa vector<bool>::reference jest klasą serwera proxy dostarczaną przez klasęvector<bool> do symulowania .bool&

Uwagi

Wymagane jest symulowane odwołanie, ponieważ język C++ nie zezwala natywnie na bezpośrednie odwołania do bitów. vector<bool> używa tylko jednego bitu na element, do którego można się odwoływać przy użyciu tej klasy serwera proxy. Jednak symulacja referencyjna nie jest kompletna, ponieważ niektóre przypisania nie są prawidłowe. Na przykład, ponieważ nie można podjąć adresu vector<bool>::reference obiektu, następujący kod, który używa vector<bool>::operator[] , nie jest poprawny:

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

Odwraca wartość logiczną elementu, do których odwołuje się vector<bool> odwołanie.

void flip();

Przykład

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

Zapewnia niejawną konwersję z vector<bool>::reference do bool.

operator bool() const;

Wartość zwracana

Wartość logiczna elementu vector<bool> obiektu.

Uwagi

Nie vector<bool> można zmodyfikować obiektu przez ten operator.

vector<bool>::reference::operator=

Przypisuje do bitu wartość logiczną lub wartość przechowywaną przez odnośny element.

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

Parametry

Right
Odwołanie elementu, którego wartość ma być przypisana do bitu.

Val
Wartość logiczna, który ma być przypisana do bitu.

Przykład

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

Statyczna funkcja składowa, która wymienia dwa elementy wektorów logicznych ( vector<bool>) przy użyciu klasy vector<bool>::referenceserwera proxy .

static void swap(
    reference Left,
    reference Right);

Parametry

Left
Element do wymiany z elementem Right .

Right
Element do wymiany z elementem Left .

Uwagi

To przeciążenie obsługuje specjalne wymagania serwera proxy programu vector<bool>. vector::swap ma taką samą funkcjonalność jak przeciążenie pojedynczego argumentu .vector<bool>::swap()

Zobacz też

Bezpieczeństwo wątku w standardowej bibliotece C++
Dokumentacja standardowej biblioteki C++