Classe vector<bool>

La vector<bool> classe è una specializzazione parziale di vector per gli elementi di tipo bool. Dispone di un allocatore per il tipo sottostante utilizzato dalla specializzazione, che offre l'ottimizzazione dello spazio mediante l'archiviazione di un valore bool per bit.

Sintassi

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

Osservazioni:

Questa specializzazione del modello di classe si comporta come vector, ad eccezione delle differenze illustrate in questo articolo.

Le operazioni che riguardano il tipo bool corrispondono ai valori in nello spazio di archiviazione del contenitore. allocator_traits::construct non viene usato per costruire questi valori.

Typedef

Nome tipo Descrizione
const_pointer typedef di un const_iterator che può essere utilizzato come puntatore costante a un elemento Boolean di vector<bool>.
const_reference Typedef per bool. Dopo l'inizializzazione, non osserva gli aggiornamenti del valore originale.
pointer typedef di un iterator che può essere utilizzato come puntatore a un elemento Boolean di vector<bool>.

Funzioni membro

Funzione membro Descrizione
flip Inverte tutti i bit del vector<bool>.
swap Scambia gli elementi di due vector<bool>.
operator[] Restituisce un riferimento simulato all'elemento vector<bool> in corrispondenza di una posizione specificata.
at Funziona come la funzione ::at non specificata vector, ad eccezione del fatto che usa la classe vector<bool>::referenceproxy . Vedere anche operator[].
front Funziona come la funzione ::front non specifica vector, ad eccezione del fatto che usa la classe vector<bool>::referenceproxy . Vedere anche operator[].
back Funziona come la funzione ::back non specifica, vectorad eccezione del fatto che usa la classe vector<bool>::referenceproxy . Vedere anche operator[].

Classe proxy

Nome Descrizione
vector<bool>::reference Classe Classe che funge da proxy per simulare il comportamento di bool& e i cui oggetti possono fornire riferimenti agli elementi (singoli bit) all'interno di un oggetto vector<bool>.

Requisiti

Intestazione: <vector>

Spazio dei nomi: std

vector<bool>::const_pointer

Tipo che descrive un oggetto che può essere utilizzato come puntatore costante a un elemento Boolean della sequenza contenuta dall'oggetto vector<bool>.

typedef const_iterator const_pointer;

vector<bool>::const_reference

Tipo che descrive un oggetto che può essere utilizzato come riferimento costante a un elemento Boolean della sequenza contenuta dall'oggetto vector<bool>.

typedef bool const_reference;

Osservazioni:

Per altre informazioni ed esempi di codice, vedere vector<bool>::reference::operator=.

vector<bool>::flip

Inverte tutti i bit di un vector<bool>.

void flip();

Esempio

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

Restituisce un riferimento simulato all'elemento vector<bool> in corrispondenza di una posizione specificata.

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

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

Parametri

Pos
Posizione dell'elemento vector<bool>.

Valore restituito

Oggetto vector<bool>::reference o vector<bool>::const_reference che contiene il valore dell'elemento indicizzato.

Se la posizione specificata è maggiore o uguale alla dimensione del contenitore, il risultato sarà non definito.

Osservazioni:

Se si esegue la compilazione con il set _ITERATOR_DEBUG_LEVEL, se si tenta di accedere a un elemento all'esterno dei limiti del vettore, si verifica un errore di runtime. Per altre informazioni, vedere Checked Iterators.

Esempio

Questo esempio di codice mostra l'uso corretto di vector<bool>::operator[] e due errori di codifica comuni, che vengono commentati. Questi errori causano errori perché l'indirizzo dell'oggetto vector<bool>::reference che vector<bool>::operator[] restituisce non può essere acquisito.

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

Tipo che descrive un oggetto che può essere utilizzato come puntatore a un elemento Boolean della sequenza contenuta dall'oggetto vector<bool>.

typedef iterator pointer;

Classe vector<bool>::reference

La vector<bool>::reference classe è una classe proxy fornita dalla vector<bool> classe per simulare bool&.

Osservazioni:

È necessario un riferimento simulato perché C++ non consente riferimenti diretti a bit in modo nativo. vector<bool> utilizza un solo bit per elemento, a cui è possibile fare riferimento tramite questa classe proxy. Tuttavia, la simulazione dei riferimenti non è completa perché alcune assegnazioni non sono valide. Ad esempio, poiché l'indirizzo dell'oggetto vector<bool>::reference non può essere acquisito, il codice seguente che usa vector<bool>::operator[] non è corretto:

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

Inverte il valore booleano di un elemento a cui si fa vector<bool> riferimento.

void flip();

Esempio

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

Fornisce una conversione implicita da vector<bool>::reference a bool.

operator bool() const;

Valore restituito

Valore booleano dell'elemento dell'oggetto vector<bool> .

Osservazioni:

L'oggetto vector<bool> non può essere modificato da questo operatore.

vector<bool>::reference::operator=

Assegna a un bit un valore booleano o il valore di un elemento a cui si fa riferimento.

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

Parametri

Right
Riferimento dell'elemento il cui valore deve essere assegnato al bit.

Val
Valore booleano da assegnare al bit.

Esempio

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

Funzione membro statica che scambia due elementi di vettori booleani ( vector<bool>) usando la classe vector<bool>::referenceproxy .

static void swap(
    reference Left,
    reference Right);

Parametri

Left
Elemento da scambiare con l'elemento Right.

Right
Elemento da scambiare con l'elemento Left.

Osservazioni:

Tale overload supporta i requisiti di proxy speciali di vector<bool>. vector::swap ha la stessa funzionalità dell'overload a argomento singolo di vector<bool>::swap().

Vedi anche

Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Informazioni di riferimento per la libreria standard C++