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>::reference proxy . Vedere anche operator[] . |
front |
Funziona come la funzione ::front non specifica vector , ad eccezione del fatto che usa la classe vector<bool>::reference proxy . Vedere anche operator[] . |
back |
Funziona come la funzione ::back non specifica, vector ad eccezione del fatto che usa la classe vector<bool>::reference proxy . 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>::reference
proxy .
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++